Skip to content

Commit 1f27e55

Browse files
committed
crashlytics post updated and performance monitoring added
1 parent e12b59b commit 1f27e55

File tree

8 files changed

+122
-8
lines changed

8 files changed

+122
-8
lines changed

_drafts/2019-02-25-analytics.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ image: firebase/analytics
77
github: firebase/tree/master/analytics
88
description: "Firebase"
99
version: Firebase-Core 16.0
10-
keywords: "firebase, analytics, event, user properties, android, programowanie, programming"
10+
keywords: "firebase, analityka, analytics, zdarzenie, event, właściwość, user properties, android, programowanie, programming"
1111
---
1212

13-
## Możliwości
13+
## Cechy
1414
`Google Analytics` dla `Firebase` jest narzędziem analitycznym przeznaczonym do pomiaru oraz rejestrowania wykorzystania aplikacji i zaangażowania użytkowników. Jest rdzeniem dla całej usługi Firebase i pozwala na integracje z różnymi innymi funkcjami. Dostarczane raporty pomagają w zrozumieniu zachowania użytkowników (w jaki sposób korzystają z aplikacji) co ułatwia podejmowanie przemyślanych, świadomych i opartych o trendy decyzje dotyczące marketingu aplikacji i optymalizacji wydajności. `SDK` rejestruje dwa podstawowe typy informacji: zdarzenia (`event`) oraz właściwości użytkownika (`user properties`), które mogą być personalizowane dla aplikacji lub pochodzić z grupy predefiniowanych. Informacje przechwytywane są w sposób automatyczny, a ich podgląd dostępny z poziomu pulpitu nawigacyjnego w `konsoli Firebase`. Na podstawie danych urządzenia, zdarzeń czy właściwości użytkownika możliwe jest tworzenie niestandardowej grupy odbiorców usług Firebase. Dodatkowo raportowane informacje mogą być przypisane do konkretnego użytkownika za pomocą jego identyfikatora przy zachowaniu polityki prywatności i regulaminu. Aby użyć Analytics do ręcznego raportowania dla konkretnego ekranu wystarczy pobrać instancje typu `FirebaseAnalytics` w `onCreate` Aktywności.
1515

1616
{% highlight kotlin %}

_drafts/2019-03-04-crashlytics.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ image: firebase/crashlytics
77
github: firebase/tree/master/crashlytics
88
description: "Firebase"
99
version: Crashlytics 2.9
10-
keywords: "firebase, crashlytics, crash, android, programowanie, programming"
10+
keywords: "firebase, crashlytics, crash, błąd, awaria, wyjątek, exception, android, programowanie, programming"
1111
---
1212

13-
## Możliwości
13+
## Cechy
1414
`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.
1515

1616
## Zgłaszanie
@@ -44,8 +44,8 @@ buttonThirdValue.setOnClickListener {
4444
//do more work
4545
}
4646
catch (e: Exception) {
47-
Crashlytics.log("buttonThirdValue action error") //to logcat
48-
Crashlytics.setInt("array_size", values.size)
47+
Crashlytics.log("buttonThirdValue action error extra log") //to logcat
48+
Crashlytics.setInt("first_number", values[0])
4949
Crashlytics.logException(e) //log to Firebase
5050
}
5151
}
@@ -55,6 +55,14 @@ private fun getThirdValue(values: ArrayList<Int>): Int {
5555
}
5656
{% endhighlight %}
5757

58+
Przegląd błędów w konsoli Firebase może prezentować się następujaco. Warto zauważyć, że przechwycone awarie mają status niekrytyczny.
59+
60+
![Lista awarii](/assets/img/diagrams/firebase/crashes_list.png){: .center-image }
61+
62+
Widok podglądu dostarcza natomiast szczegółowych informacji co może być przydatne w kontekście znalezienia błędu i okoliczności jego wystąpienia.
63+
64+
![Trasa awarii](/assets/img/diagrams/firebase/crash_trace.png){: .center-image }
65+
5866
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`.
5967

6068
## Debugowanie
@@ -77,10 +85,10 @@ adb logcat -s Fabric CrashlyticsCore
7785
{% endhighlight %}
7886

7987
## 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.
88+
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 opcjonalnie włączyć raportowanie w kodzie zgodnie z decyzją użytkownika.
8189

8290
{% highlight xml %}
83-
//in AndroidManifest.xml
91+
<!-- in AndroidManifest.xml -->
8492
<meta-data
8593
android:name="firebase_crashlytics_collection_enabled"
8694
android:value="false" />
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
---
2+
layout: post
3+
title: "Performance Monitoring"
4+
date: 2019-03-11
5+
categories: ["Firebase"]
6+
image: firebase/performance_monitoring
7+
github: firebase/tree/master/performance_monitoring
8+
description: "Firebase"
9+
version: Firebase-Perf 16.2
10+
keywords: "firebase, wydajność, performance, monitoring, trasa, trace, network, android, programowanie, programming"
11+
---
12+
13+
## Cechy
14+
`Firebase Performance Monitoring` jest usługą pomagającą uzyskać wgląd do wydajności aplikacji na urządzeniach użytkowników dzięki czemu możliwe jest zlokalizowanie i rozwiązanie problemów związanych z wydajnością, płynnością i szybkością działania. Automatycznie dokonuje pomiarów dla czasu startu aplikacji, działania w tle (i na pierwszym planie), renderowania ekranów czy też większości zapytań sieciowych. Przesłane raporty zawierają informacje nt użycia procesora i pamięci, a także metadane urządzenia (m.in. model, wersja systemu, wersja aplikacji, kraj) i szczegółów trasy zgłoszenia. Performance Monitoring nie zbiera żadnych danych personalnych użytkownika. Jeśli automatycznie przesyłane próbki to za mało istnieje również możliwość tworzenia personalizowanych tras śledzenia wydajności. Konsola Firebase automatycznie dokonuje analizy otrzymanych próbek na podstawie których generuje podpowiedzi o potencjalnie niewydajnych miejscach aplikacji.
15+
16+
## Trasy personalizowane
17+
Rejestrowanie wydajności aplikacji zachodzi na tzw. trasach (`traces`), które opisane są między dwoma miejscami: punktem startowym i końcowym. Automatyczna trasa dla działania aplikacji w tle (`App in background`) rozpoczyna się od momentu kiedy ostatnia Aktywność (`Activity`) będąca w `foreground` wywoła `onStop`, a zakończy się w momencie wywołania `onResume` przez pierwszą Aktywność przechodzącą z trybu `background` do `foreground`. Podobnie rzecz ma się z trasami własnymi, które dotyczą wybranego przez programistę przedziału cyklu życia.
18+
19+
//TODO
20+
{% highlight kotlin %}
21+
val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
22+
myTrace.start()
23+
myTrace.stop()
24+
{% endhighlight %}
25+
26+
Trasy personalizowane mogą być dodatkowo opisane metrykami, których zadaniem jest liczenie wystąpień pewnych zdarzeń.
27+
28+
//TODO
29+
{% highlight kotlin %}
30+
val item = cache.fetch("item")
31+
if (item != null) {
32+
myTrace.incrementMetric("item_cache_hit", 1)
33+
} else {
34+
myTrace.incrementMetric("item_cache_miss", 1)
35+
}
36+
{% endhighlight %}
37+
38+
Dodanie adnotacji `@AddTrace` do metody wraz z jej nazwą powoduje rejestrowanie wydajności podczas wykonywania funkcji (trasa rozpoczyna się na początku metody, a kończy kiedy zostanie wykonana). Jednakże tak stworzone trasy nie mają możliwości dodawania metryk.
39+
40+
//TODO
41+
{% highlight kotlin %}
42+
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
43+
override fun onCreate(savedInstanceState: Bundle?) {
44+
super.onCreate(savedInstanceState)
45+
}
46+
{% endhighlight %}
47+
48+
## Zapytania sieciowe
49+
Wysyłane żądania sieciowe `HTTP/S` są przechwytywane i przetwarzane do postaci raportów zawierających informacje takie jak: czas odpowiedzi, rozmiar wysłanych żądań i otrzymanych odpowiedzi, wskaźnik sukcesu oraz metadane urządzenia. Ze względu na zachowanie polityki prywatności Performance Monitoring pomija parametry `URL` w procesie budowania anonimowych wzorców adresów wyświetlanych w `konsoli Firebase`. Rejestrowanie zdarzeń sieciowych wspierane jest tylko dla żądań stworzony przy użyciu `OkHttp3`.
50+
51+
//TODO
52+
{% highlight kotlin %}
53+
val metric = FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
54+
FirebasePerformance.HttpMethod.GET)
55+
val url = URL("https://www.google.com")
56+
metric.start()
57+
val conn = url.openConnection() as HttpURLConnection
58+
conn.doOutput = true
59+
conn.setRequestProperty("Content-Type", "application/json")
60+
try {
61+
val outputStream = DataOutputStream(conn.outputStream)
62+
outputStream.write(data)
63+
} catch (ignored: IOException) {
64+
}
65+
66+
metric.setRequestPayloadSize(data.size.toLong())
67+
metric.setHttpResponseCode(conn.responseCode)
68+
printStreamContent(conn.inputStream)
69+
70+
conn.disconnect()
71+
metric.stop()
72+
{% endhighlight %}
73+
74+
## Debugowanie
75+
Tryb debugowania pozwala już na wczesnym etapie deweloperskim sprawdzić poprawność konfiguracji oraz otrzymywane rezultaty. Aby włączyć debugowanie należy dodać odpowiedni wpis `meta-data` do `AndroidManifest` oraz uruchomić właściwe polecenie w `adb`.
76+
77+
{% highlight xml %}
78+
<meta-data
79+
android:name="firebase_performance_logcat_enabled"
80+
android:value="true" />
81+
{% endhighlight %}
82+
83+
{% highlight console %}
84+
adb logcat -s FirebasePerformance
85+
{% endhighlight %}
86+
87+
## Automatyczne raportowanie
88+
Zbieranie i wysyłanie raportów jest domyślnie włączone dla wszystkich użytkowników i wersji aplikacji. W przypadku, gdy istnieje potrzeba opcjonalnego wyłączenia raportowania (np. dla wersji deweloperskich) należy dodać odpowiedni wpis `meta-data` do `AndroidManifest` lub zmienić wartość właściwości `firebasePerformanceInstrumentationEnabled` w `gradle.properties`.
89+
90+
{% highlight xml %}
91+
<!-- disable at build time but allow to enable at runtime -->
92+
<meta-data
93+
android:name="firebase_performance_logcat_enabled"
94+
android:value="true" />
95+
96+
<!-- disable at build time and don't allow to enable at runtime -->
97+
<meta-data
98+
android:name="firebase_performance_collection_deactivated"
99+
android:value="true" />
100+
{% endhighlight %}
101+
102+
Aby dokonywać zmian (włączenia lub wyłączenia raportowania) w trakcie działania programu ze względu na ustawienia użytkownika lub zdalną konfigurację wystarczy zmienić wartość właściwości `isPerformanceCollectionEnabled`.
103+
104+
{% highlight kotlin %}
105+
FirebasePerformance.getInstance().isPerformanceCollectionEnabled = true //get value from pref or remote config
106+
{% endhighlight %}
55.8 KB
Loading
28.8 KB
Loading
394 KB
Loading
13.4 KB
Loading
31 KB
Loading

0 commit comments

Comments
 (0)