Skip to content

Commit e12b59b

Browse files
committed
crashlytics post added and analytics updated
1 parent af4fd30 commit e12b59b

File tree

8 files changed

+124
-4
lines changed

8 files changed

+124
-4
lines changed

_drafts/2019-02-25-analytics.md

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ image: firebase/analytics
77
github: firebase/tree/master/analytics
88
description: "Firebase"
99
version: Firebase-Core 16.0
10-
keywords: "firebase, analytics, android, programowanie, programming"
10+
keywords: "firebase, analytics, event, user properties, android, programowanie, programming"
1111
---
1212

1313
## Możliwości
@@ -51,6 +51,10 @@ class MainActivity : AppCompatActivity() {
5151
}
5252
{% endhighlight %}
5353

54+
Przegląd danych zdarzeń w konsoli Firebase może prezentować się jak poniżej. Warto zauważyć, że niecałe 30% użytkowników przechodzi z pierwszego do drugiego ekranu i niewiele więcej wypełnia pole edycji w pierwszym ekranie.
55+
56+
![Statystyki zdarzeń](/assets/img/diagrams/firebase/analytics_events.png){: .center-image }
57+
5458
## Właściwości użytkownika
5559
`Właściwości użytkownika` (`user attributes`) są atrybutami opisującymi segmenty bazy użytkowników dzięki którym przesyłane dane mogą być analizowane i filtrowane pod kątem wskazanej grupy docelowej. Podobnie jak w przypadku zdarzeń niektóre właściwości rejestrowane są w sposób auotomatyczny i są to np. wiek (`Age`), kraj (`Country`), marka urządzenia (`Device brand`), płeć (`Gender`), wersja systemu (`OS Version`) czy język (`Language`). W przypadku przesyłania dodatkowych informacji należy zarejestrować właściwość w konsoli Firebase oraz ustawić właściwość w kodzie za pomocą metody `setUserProperty` przekazując klucz oraz parametr opisujący.
5660

@@ -70,9 +74,29 @@ class SecondActivity : AppCompatActivity() {
7074
}
7175
{% endhighlight %}
7276

77+
Konsola Firebase dostarcza także informacji nt właściwości użytkownika. Co ciekawe z aplikacji korzystają tylko urządzenia z Android 9, a użytkownicy pochodzą z Polski.
78+
79+
![Statystyki właściwości użytkownika](/assets/img/diagrams/firebase/analytics_user_properties.png){: .center-image }
80+
7381
## Śledzenie ekranów
7482
Analytics śledzi także przejścia między ekranami i dołącza do zdarzeń informacje o aktualnymi ekranie. Kiedy następuje zdarzenie wyświetlenia ekranu automatycznie dołącza parametr `firebase_screen_class` z informacją o nazwie klasy np. `MainActivity` oraz generuje `firebase_screen_id`. Śledzenie ekranów może być zgłaszane ręcznie poprzez metodę `setCurrentScreen` co może być przydatne jeśli aplikacja nie używa oddzielnego kontrolera `UIView` lub `Activity` na każdym śledzonym ekranie.
7583

76-
## Wyświetlanie wyników
77-
//TODO debugView + debugowanie w konsoli
78-
-mozna ustawic tryb debugowania co widac w konsoli
84+
## Debugowanie
85+
Aby dokonać weryfikacji poprawności konfiguracji Analytics z aplikacją można włączyć debugowanie i sprawdzić na maszynie deweloperskiej (w konsoli `logcat`) czy i jakie informacje są przesyłane.
86+
87+
{% highlight console %}
88+
adb shell setprop log.tag.FA VERBOSE
89+
adb shell setprop log.tag.FA-SVC VERBOSE
90+
adb logcat -v time -s FA FA-SVC
91+
{% endhighlight %}
92+
93+
Dodatkowo konsola Firebase oferuje możliwość wykorzystania trybu `DebugView`, który pozwala na walidację przesyłanych informacji w trybie rzeczywistym. W przeciwieństwie do standardowego produkcyjnego trybu `StreamView` w którym informacje wysyłane są grupowe co jakiś czas, logowanie odbywa się dla każdego zdarzenia osobno z minimalnym opoźnieniem. Aby włączyć tryb `DebugView` na urządzeniu należy wykonać poniższe polecenie.
94+
95+
{% highlight console %}
96+
adb shell setprop debug.firebase.analytics.app <package_name> //enable
97+
adb shell setprop debug.firebase.analytics.app .none. //disable
98+
{% endhighlight %}
99+
100+
Tryb DebugView umożliwia podgląd informacji zarówno w ogólnym trybie minutowym jak w szczegółowym trybie sekundowym.
101+
102+
![Tryb DebugView](/assets/img/diagrams/firebase/analytics_debug_view.png){: .center-image }

_drafts/2019-03-04-crashlytics.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
layout: post
3+
title: "Crashlytics"
4+
date: 2019-03-04
5+
categories: ["Firebase"]
6+
image: firebase/crashlytics
7+
github: firebase/tree/master/crashlytics
8+
description: "Firebase"
9+
version: Crashlytics 2.9
10+
keywords: "firebase, crashlytics, crash, android, programowanie, programming"
11+
---
12+
13+
## Możliwości
14+
`Firebase Crashlytics` jest narzędziem raportującym awarie w aplikacji w czasie rzeczywistym, które pochodzą z urządzeń użytkowników na których zainstalowana jest aplikacja włączając w to urządzenia deweloperskie. Pomaga śledzić błędy oraz ustalać ich priorytety dzięki czemu możliwa jest weryfikacja i naprawa problemów związanych ze stabilnością co znacząco wpływa na utrzymanie jakości. Inteligentne grupowanie awarii wraz z informacjami o okolicznościach, które do nich doprowadziły pozwala zaoszczędzić czas w procesie diagnozy, zlokalizować błędny lub potencjalnie niebezpieczny fragment kodu oraz ustalić zakres użytkowników których awaria dotyczy. Crashlytics jest ogromnym wsparciem dla deweloperów w procesie utrzymania i rozwoju aplikacji.
15+
16+
## Zgłaszanie
17+
Crashlytics automatycznie zbiera i wysyła raporty o występujących błędach i awariach do konsoli Firebase (np. gdy zostanie wyrzucony `fatal exception`) oraz umożliwia ręczne logowanie przechwyconych błędów za pomocą metody `logException`. Warto odnotować, że wyjątki nie są zgłaszane pojedynczo lecz grupowo co odbywa się na dedykowanym wątku w tle dzięki czemu wpływ na wydajność aplikacji jest minimalny. Crashlytics przechowuje informacje o 8 ostatnich wyjątkach.
18+
19+
{% highlight kotlin %}
20+
buttonDivide.setOnClickListener {
21+
try {
22+
//mock exception
23+
val value = div(10, 0)
24+
//do more work
25+
}
26+
catch (e: Exception) {
27+
Crashlytics.logException(e)
28+
}
29+
}
30+
31+
private fun div(a: Int, b: Int): Int {
32+
return a/b
33+
}
34+
{% endhighlight %}
35+
36+
Ponadto pozwala na personalizację zgłaszanych informacji poprzez wypisywanie logów do konsoli oraz dodawanie niestandardowych kluczy pomagających uzyskać określony stan aplikacji prowadzący do awarii.
37+
38+
{% highlight kotlin %}
39+
buttonThirdValue.setOnClickListener {
40+
val values = arrayListOf(1,2) //mock values
41+
try {
42+
//mock exception
43+
val value = getThirdValue(values)
44+
//do more work
45+
}
46+
catch (e: Exception) {
47+
Crashlytics.log("buttonThirdValue action error") //to logcat
48+
Crashlytics.setInt("array_size", values.size)
49+
Crashlytics.logException(e) //log to Firebase
50+
}
51+
}
52+
53+
private fun getThirdValue(values: ArrayList<Int>): Int {
54+
return values[2]
55+
}
56+
{% endhighlight %}
57+
58+
W diagnozie problemów często przydatna może być informacja identyfikująca użytkownika, który doświadczył awarii co możliwe jest poprzez ustawienie id metodą `setUserIdentifier`.
59+
60+
## Debugowanie
61+
Aby sprawdzić poprawność konfiguracji Crashlytics z aplikacją nie trzeba czekać na pierwsze zgłoszenia wyjątków lecz można ręcznie wymuśić przesłanie zgłoszenia metodą `crash`.
62+
63+
{% highlight kotlin %}
64+
Crashlytics.getInstance().crash();
65+
{% endhighlight %}
66+
67+
Dodatkowo w celu weryfikacji przesyłanych informacji warto włączyć tryb debugowania.
68+
69+
{% highlight console %}
70+
//before running app
71+
adb shell setprop log.tag.Fabric DEBUG
72+
adb shell setprop log.tag.CrashlyticsCore DEBUG
73+
//for disable use INFO flag
74+
75+
//view the logs
76+
adb logcat -s Fabric CrashlyticsCore
77+
{% endhighlight %}
78+
79+
## Automatyczne raportowanie
80+
Zbieranie i wysyłanie raportów jest domyślnie włączone dla wszystkich użytkowników. Aby dać użytkownikom możliwość decydowania o przesyłanych informacjach należy wyłączyć automatyczne raportowanie dodając odpowiedni wpis `meta-data` do `AndroidManifest` oraz włączyć w kodzie nasłuchiwanie dla wybranych użytkowników.
81+
82+
{% highlight xml %}
83+
//in AndroidManifest.xml
84+
<meta-data
85+
android:name="firebase_crashlytics_collection_enabled"
86+
android:value="false" />
87+
{% endhighlight %}
88+
89+
{% highlight kotlin %}
90+
//enable from one of app's Activity
91+
private fun enableCrashlytics() {
92+
val enable = true //mock value, get from some preferences
93+
if(enable)
94+
Fabric.with(this, Crashlytics())
95+
}
96+
{% endhighlight %}
87.9 KB
Loading
29.7 KB
Loading
19.7 KB
Loading
407 KB
Loading
12.9 KB
Loading
36.1 KB
Loading

0 commit comments

Comments
 (0)