The Day After

86
Danny Preussler | Groupon GmbH Lars Röwekamp | open knowledge GmbH The Day after

description

Speaker: Lars Röwekamp und Danny Preußler (Groupon) Die eigene App ist finalisiert, ausgiebig getestet und seit „gestern“ im Google Play Store verfügbar. Wer allerdings glaubt, dass jetzt die Arbeit getan ist, der wird in dieser Session eines besseren belehrt. Dank Google Play Store Monitoring, Crash-Reporting Tools und proaktiven Einsammeln von User Feedback, bekommt der Android Entwickler mehr als ausreichend Mittel an die Hand, Informationen über das Laufzeitverhalten der eigenen App zu sammeln, um diese so auch nach dem Release noch weiter optimieren zu können. Werden diese Möglichkeiten geschickt kombiniert, kann man auch im Fehlerfalle eine gute User Experience erzeugen und erhält am Ende eine positive Nutzerbewertung im Store – was möchte man mehr.

Transcript of The Day After

Page 1: The Day After

Danny Preussler | Groupon GmbH Lars Röwekamp | open knowledge GmbH

The Day after

Page 2: The Day After

Quelle: https://www.flickr.com/photos/laihiu/4407979507/ Work hard ...

Page 3: The Day After

Quelle: http://www.flickr.com/photos/ilovelegends/211268672

... Play hard!

Page 4: The Day After

Quelle: http://www.flickr.com/photos/el_ramon/14080756354

Vacation

Page 5: The Day After

Waik up!

Page 6: The Day After

What the ... !

Page 7: The Day After

Quelle: https://c1.staticflickr.com/9/8053/8407563525_7b5af52459_z.jpg

Page 8: The Day After

Fehler erkennen Probleme beheben

Zum Upgrade motivieren KEINE negative Bewertung

Road to „Super App“ Quelle: https://www.flickr.com/photos/aigle_dore/5849712695/

Page 9: The Day After

In-App Logging

Crash Reporting

Rollout-Strategie

Update-Zyklen

App Monitoring

Page 10: The Day After

In-App Logging

Page 11: The Day After

Android Logging

e(String tag, String message) w(String tag, String message) i(String tag, String message) d(String tag, String message) v(String tag, String message)

wtf(String tag, String message)

Page 12: The Day After

LogCat

Page 13: The Day After

LogCat

Logs: main, system, event, radio

Page 14: The Day After

Log Level Kontrolle public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// home-brew log level control if (AppLog.isDebugEnabled()) {

Log.d(TAG, "onCreated called"); }

setContentView(R.layout.activity_main);

} }

Page 15: The Day After

Prepare for Release

Page 16: The Day After

Log Kontrolle public class MainActivity extends Activity {

private final static String TAG = "MainActivity"; private final static boolean DEBUG= true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// home-brew logging control if (DEBUG) {

Log.d(TAG, "onCreated called"); }

setContentView(R.layout.activity_main);

} }

Page 17: The Day After

Log Kontrolle public class MainActivity extends Activity {

private final static String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// FALSE, enable with “adb shell setprob log.tag.MainActivity DEBUG“ if (isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "onCreated called");

}

setContentView(R.layout.activity_main); } }

Page 18: The Day After

ProGuard

Page 19: The Day After

Roboguice

Page 20: The Day After

Roboguice •  kein Debug & Verbose im Release •  autom. Loggen von Context-Infos •  bessere Performance •  Override Möglichkeiten

– Format – Log-File

Page 21: The Day After

Was, wann, wie loggen? •  Fehler grundsätzlich via e •  Probleme via w •  Business LifeCycle via i •  Component LifeCycle, Values etc. via d

•  WTFs via wtf

Page 22: The Day After

Was, wann, wie loggen? •  Ausreichend Kontext-Info loggen, um

einen Fehler, ein Problem, einen fachlichen Ablauf identifizieren und beheben zu können.

Page 23: The Day After

Ok, aber ... •  Wie komme ich an die „Logs“ meiner

App-User?

Page 24: The Day After

Crash Reporting

Page 25: The Day After

Worum geht‘s

Page 26: The Day After

Worum geht‘s •  Laufzeitinformationen sammeln •  Laufzeitinformationen senden •  Laufzeitinformationen auswerten

•  Unerwartetes User-Verhalten •  Unerwartete Werte in der App •  Allgemeines Exceptions •  Crashes

Page 27: The Day After

Womit geht‘s •  Google Developer Bordmittel

•  ACRA (plus ...) •  HockeyApp (plus ...) •  BugSense •  ...

Page 28: The Day After

Google Developer Console

Page 29: The Day After

Google Developer Console

Page 30: The Day After

Google Developer Console

Page 31: The Day After

Google Developer Console

Page 32: The Day After

Google Developer Console

Page 33: The Day After

Google Developer Console •  „gute“ Übersicht •  „nette“ Mischung an Informationen

•  keine Zuordnung Fehler/Geräte •  keine Zuordnung Fehler/Versionen •  nur Stacktraces ohne Zusatzinfo

Page 34: The Day After
Page 35: The Day After

ACRA

Page 36: The Day After

ACRA •  klinkt sich bei „Ausnahmen“ dazwischen •  erstellt „Crash Reports“ •  reichert „Crash Reports“ um Kontext an •  sendet „Crash Reports“ an Backend(s)

•  frei & open source

•  benötigt Internet-Permission

Page 37: The Day After

ACRA Kickstart

Page 38: The Day After

ACRA Modes •  Silent (default) •  Toast •  Notification •  Dialog

Page 39: The Day After

ACRA Modes - Silent

Page 40: The Day After

ACRA Modes - Toast

Page 41: The Day After

ACRA Modes - Notification

Page 42: The Day After

ACRA Modes - Dialog

Page 43: The Day After

ACRA Reports

Page 44: The Day After

ACRA Modes - MyReport

Android Intent mit ACTION_SEND auf

BTW eMail ist auch möglich:

Page 45: The Day After

ACRA Modes - MySender

Page 46: The Day After

ACRA Advanced Features •  eigene Report Key/Values •  Zugriff auf alle Logs inkl. Filter •  Zugriff auf DropBoxManager •  Konfiguration durch Nutzer (via Prefs) •  Versenden von Preferences •  Cought Exceptions / Silent Exceptions

Page 47: The Day After

ACRA Backends •  Google Forms •  ACRA Analyser (hosted & self hosted) •  ACRA Reporter (hosted & self hosted) •  BugSense (hosted) •  HockeyApp (hosted)

•  My ACRA Backend (home-brew)

Page 48: The Day After

ACRA Analyzer

Page 49: The Day After

ACRA Analyzer

Page 50: The Day After

ACRA & BugSense

Page 51: The Day After

ACRA & BugSense

Page 52: The Day After

ACRA MyBackend

http://yourserver.com/yourscript/fe24835f-8117-4639-bfea-f57c77205771

Unique Report ID

Page 53: The Day After

ACRA & Co. •  direktes Nutzerfeedback (ohne Google) •  Fehler/Device/Version Zuordnung

•  mehr Informationen •  qualifiziertere Informationen •  Informationen individuell anpassbar

•  Traffic-Aufkommen steuerbar

Page 54: The Day After

Rating aus der App heraus!

public void someMethod() { Uri uri = Uri.parse("market://details?id=“+ APP_NAME); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); }

Page 55: The Day After

Rollout •  „Dogfood“ builds •  Interne oder externe Beta-Phase!

Page 56: The Day After
Page 57: The Day After

Rollout •  Google Play Alpha/Beta Channel

Page 58: The Day After

Rollout •  Zutritt erfolgt über

Google Mail oder G+ Gruppen

Page 59: The Day After

Rollout

Page 60: The Day After

Rollout •  Vorteile:

– Tester bekommen normale Play-Store Updates

– Wenn Test beendet, wieder Teil der „normalen User“ ohne Deinstallation

Page 61: The Day After

Staged Rollout •  App geht nur an Teil der Nutzer:

5%, 10%, 20% 50% •  Kritische Fehler betreffen nur

Teilgruppe •  Langsames Steigern möglich

Page 62: The Day After

What does your app when it‘s not crashing?

Page 63: The Day After

Monitor your app!

Page 64: The Day After

Monitor your ratings •  Ratings ernst nehmen:

bester Kanal zu den Nutzern! Nächstes Feature ist vermutlich schon als Review gewünscht

Page 65: The Day After

Monitor your traffic •  Serverprobleme werden auf die App

geschoben •  App ist anders als Web!

Deinstalliert ist deinstalliert!

goodbye by woodleywonderworks, CC BY 2.0, https://www.flickr.com/photos/wwworks/5841979717

Page 66: The Day After

•  Nutzerverhalten verstehen lernen •  Welche Geräte und Android Versionen

sind eingesetzt

Monitor your app: Google Analytics

Page 67: The Day After

Monitor your app: Google Analytics

•  The number of active users are using their applications. •  From where in the world the application is being used. •  Adoption and usage of specific features. •  Crashes and exceptions. •  In-app purchases and transactions. •  And many other useful metrics...

Page 68: The Day After

Monitor your app: Google Analytics

GoogleAnalytics.getInstance(this) .reportActivityStart(this);

... .reportActivityStop(this);

Page 69: The Day After

Monitor your app: Google Analytics

•  Seit v4 Teil der Play Service •  EasyTracker nicht mehr unterstützt

aber: GoogleAnalytics.getInstance(this) .enableAutoActivityReports(..)

Page 70: The Day After

Monitor your app: New Relic

•  App Performance messen •  Netzwerk-Latenzen erkennen

z.B. auch in bestimmten Regionen •  In App Performance messen

Page 71: The Day After

Monitor your app: New Relic

Page 72: The Day After

Monitor your app: New Relic

Page 73: The Day After

Monitor your app: New Relic

Page 74: The Day After

Monitor your app: New Relic

Page 75: The Day After

Updates •  Balance zwischen zu oft und zu selten •  Balance zwischen

buggy (Hotfix Flut) und kaum gepflegt

Page 76: The Day After

Updates •  Fakt:

Jedes Update bringt Traffic „newsletters of mobile world“

•  Erfahrungswert: Update alle 2-6 Wochen

Page 77: The Day After

Updates

Kanban board by Sébastien Delest, CC BY 2.0, https://www.flickr.com/photos/seb314fr/8851499401

Page 78: The Day After

Updates •  Schnelle Entwicklungszyklen z.B. kurze

Scrums müssen nicht immer in Release münden aber releasebar sein!

•  Kanban sehr gut geeignet, ab bestimmtem Punkt wird releast

Page 79: The Day After

Updates •  Acntung!

Es dauert erfahrungsgemäß 2 Wochen bis >50% der Nutzer neue Version haben

Page 80: The Day After

Updates •  Vorsicht bei

gleichzeitigen Server-Updates!

•  Update ist schuld!

Bro

ken

iPho

ne 4

by

Dav

eOnF

lickr

, CC

BY

2.0,

http

s://w

ww

.flic

kr.c

om/p

hoto

s/rn

ddav

e/50

9402

0069

Page 81: The Day After

Updates •  Vorsicht bei neuen Berechtigung:

– Nutzer müssen zustimmen! à Kein Auto-Update!

– Nicht mit Hotfixes vermischen!

stamps by Joel Kramer, CC BY 2.0, https://www.flickr.com/photos/75001512@N00/2344294338

Page 82: The Day After

Updates •  Vorsicht bei neuen Berechtigung:

– Erfahrungsgemäß dauert es 2-3 Versionen(!) bis alle Nutzer geupdatet

– Jede Berechtigung kostet Nutzer!

goodbye by woodleywonderworks, CC BY 2.0, https://www.flickr.com/photos/wwworks/5841979717

Page 83: The Day After

Updates

•  Es werden immer ältere Versionen verbleiben!

Floppy Computer Disks by Intel Free Press, CC BY 2.0, https://

www.flickr.com/photos/intelfreepress/10963767235

Page 84: The Day After

Updates

•  Manuelles force update?

•  Message an Nutzer per API?

•  Versionen für alte Geräte bereitstellen?

STOP POLICE! by Highway Patrol Images, CC BY 2.0,

www.flickr.com/photos/special-fx/4545067655

Page 85: The Day After

Updates •  Tip: Automation Tests der alten

Versionen mittels Branch weiter laufen lassen um Probleme mit Serveränderungen zu erkennen

Page 86: The Day After

Thank you