In-App-Updates: Beschleunigen von Android-Anwendungsupdates



Unter den verschiedenen Tools, die auf dem Android Dev Summit angekündigt wurden, möchte ich dem Mechanismus zur Aktualisierung von In-App-Updates (IAUs) besondere Aufmerksamkeit widmen, mit dem Entwickler das Hinzufügen neuer Funktionen, Fehlerkorrekturen und Leistungsverbesserungen beschleunigen können. Da diese Funktionalität nach Google I / O 2019 veröffentlicht wurde, werde ich in diesem Artikel ausführlich über IAUs sprechen, die empfohlenen Implementierungsschemata beschreiben und einige Codebeispiele geben. Ich werde auch über unsere Erfahrungen bei der Integration von IAUs in Pandao sprechen , eine Anwendung zur Bestellung von Waren aus China.

Mit der neuen API können Entwickler ein Anwendungsupdate auf die neueste Version von Google Play initiieren. Auf diese Weise ergänzen IAUs den vorhandenen automatischen Aktualisierungsmechanismus von Google Play. IAUs enthalten mehrere Implementierungsschemata, die sich in Bezug auf die Benutzerinteraktion grundlegend unterscheiden.

  1. Flexible Flow bietet Benutzern die Möglichkeit, das Update im Hintergrund herunterzuladen und zu einem für den Benutzer geeigneten Zeitpunkt zu installieren. Es ist für Fälle vorgesehen, in denen Benutzer die alte Version weiterhin verwenden können, eine neue jedoch bereits verfügbar ist.


  2. Für den sofortigen Ablauf müssen Benutzer das Update herunterladen und installieren, bevor sie die Anwendung weiter verwenden können. Es ist für Fälle gedacht, in denen es für Entwickler wichtig ist, die Anwendung zu aktualisieren.



Da die zweite Option für die Pandao-Anwendung nicht so wichtig und weniger geeignet ist, werden wir das Flexible Flow-Szenario genauer analysieren.

IAUs Flexible Flow Integration


Anwendungsfälle


Der Upgrade-Prozess mit IAUs besteht aus mehreren Schritten.

  1. Eine Anwendung, die die Play Core-Bibliothek verwendet und bei Google Play prüft, ob Updates verfügbar sind.
  2. Wenn dies der Fall ist, fordert die Anwendung Google Play auf, den IAU-Dialog anzuzeigen. Google Play zeigt dem Nutzer einen Dialog mit einem Aktualisierungsvorschlag.
  3. Wenn der Nutzer zustimmt, lädt Google Play im Hintergrund das Update herunter und zeigt dem Nutzer in der Statusleiste den Download-Fortschritt an.
  4. Wenn der Download abgeschlossen ist, während die Anwendung im Hintergrund ausgeführt wird, schließt Google Play die Installation automatisch ab. Wenn die Anwendung zu diesem Zeitpunkt aktiv ist, müssen Sie in solchen Fällen Ihre eigene Logik für den Abschluss der Installation festlegen. Betrachten Sie die folgenden Szenarien.
    1. Die Anwendung startet den Installationsprozess, indem sie dem Nutzer ein Google Play-Dialogfeld mit einer Fortschrittsanzeige anzeigt. Nach Abschluss der Installation wird eine aktualisierte Version der Anwendung gestartet. In diesem Fall wird empfohlen, ein zusätzliches Dialogfeld anzuzeigen, in dem der Benutzer bestätigen kann, dass er bereit ist, die Anwendung jetzt neu zu starten. Dies ist das empfohlene Implementierungsschema .
    2. Die Anwendung wartet, bis sie sich im Hintergrund befindet, und schließt dann die Aktualisierung ab. Einerseits ist dies aus Sicht von UX ein weniger aufdringliches Verhalten, da die Benutzerinteraktion mit der Anwendung nicht unterbrochen wird. Andererseits muss der Entwickler die Logik implementieren, um festzustellen, ob sich die Anwendung im Hintergrund befindet.

Wenn die Installation des heruntergeladenen Updates nicht abgeschlossen wurde, kann Google Play die Installation im Hintergrund abschließen. Diese Option sollte besser nicht explizit verwendet werden, da sie die Installation des Updates nicht garantiert.

Grundlegende Testanforderungen


Um den gesamten Aktualisierungsvorgang auf einem Testgerät manuell abzuschließen, benötigen Sie mindestens zwei Versionen der Anwendung mit unterschiedlichen Baugruppennummern: Quelle und Ziel .

  • Die Originalversion mit einer höheren Nummer muss auf Google Play veröffentlicht werden. Sie wird von Google Play als verfügbares Update identifiziert. Die Zielversion mit einer niedrigeren Build-Nummer und integrierten IAUs muss auf dem Gerät installiert sein. Wir werden sie aktualisieren. Unter dem Strich vergleicht die Anwendung, wenn sie Google Play auffordert, nach einem Update zu suchen, die Baugruppennummern der installierten und verfügbaren Version. Daher werden IAUs nur gestartet, wenn die Build-Nummer bei Google Play höher ist als die aktuelle Version auf dem Gerät.
  • Die Quell- und Zielversion müssen denselben Paketnamen haben und mit demselben Versionszertifikat signiert sein.
  • Android 5.0 (API Level 21) oder höher.
  • Spielen Sie Core Library 1.5.0 oder höher.

Codebeispiel


Hier sehen wir uns einen Beispielcode für die Verwendung von IAUs Flexible Flow an, der auch in der offiziellen Dokumentation enthalten ist . Zuerst müssen Sie die Play Core-Bibliothek der Datei build.gradle auf Modulebene hinzufügen.

dependencies { ... implementation "com.google.android.play:core:1.5.0" } 

Erstellen Sie dann eine Instanz von AppUpdateManager und fügen Sie AppUpdateManager eine Rückruffunktion AppUpdateInfo , die Informationen über die Verfügbarkeit des Updates, das Objekt zum Starten des Updates (falls verfügbar) und den aktuellen Download-Fortschritt AppUpdateInfo , falls es bereits begonnen hat.

 // Create instance of the IAUs manager. val appUpdateManager = AppUpdateManagerFactory.create(context) // Add state listener to app update info task. appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> // If there is an update available, prepare to promote it. if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { // ... } // If the process of downloading is finished, start the completion flow. if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { // ... } } .addOnFailureListener { e -> // Handle the error. } 

Um das Dialogfeld zum Anfordern von Updates von Google Play AppUpdateInfo , müssen Sie das empfangene AppUpdateInfo Objekt an die Methode AppUpdateInfo .

  appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.IMMEDIATE for immediate updates. AppUpdateType.FLEXIBLE, // The current activity. activity, REQUEST_CODE ) 

Um den Status des Updates zu überwachen, können Sie dem IAUs-Manager den Ereignis-Listener InstallStateUpdatedListener hinzufügen.

 // Create a listener to track downloading state updates. val listener = InstallStateUpdatedListener { state -> // Update progress indicator, request user to approve app reload, etc. } // At some point before starting an update, register a listener for updates. appUpdateManager.registerListener(listener) // ... // At some point when status updates are no longer needed, unregister the listener. appUpdateManager.unregisterListener(listener) 

Sobald das Update heruntergeladen wurde (Status DOWNLOADED ), müssen Sie die Anwendung neu starten, um das Update abzuschließen. Der Neustart kann durch Aufrufen von appUpdateManager.completeUpdate() eingeleitet werden. appUpdateManager.completeUpdate() wird jedoch empfohlen, ein Dialogfeld appUpdateManager.completeUpdate() , damit der Benutzer seine Bereitschaft zum Neustart der Anwendung ausdrücklich bestätigt.

 Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() } 

Fehler "Update ist nicht verfügbar"


Überprüfen Sie zunächst erneut, ob die im Abschnitt Grundlegende Implementierungsanforderungen aufgeführten Anforderungen erfüllt sind. Wenn Sie alles getan haben, die Aktualisierung gemäß dem onSuccess Aufruf jedoch immer noch nicht verfügbar ist, liegt das Problem möglicherweise im Caching. Es ist wahrscheinlich, dass die Google Play-Anwendung das verfügbare Update aufgrund des internen Caching-Mechanismus nicht kennt. Um dies beim manuellen Testen zu vermeiden, können Sie einen Cache-Reset erzwingen, indem Sie bei Google Play auf die Seite "Meine Apps und Spiele" gehen. Oder Sie können den Cache einfach in den Einstellungen der Google Play-Anwendung leeren. Bitte beachten Sie, dass dieses Problem nur während des Testens auftritt und keine Auswirkungen auf Endbenutzer haben sollte, da deren Cache weiterhin täglich aktualisiert wird.

IAUs flexibler Fluss in der Pandao-App


Wir haben an einem Early-Access-Programm teilgenommen und IAUs Flexible Flow (empfohlene Implementierung) in die Pandao-Anwendung integriert, eine Plattform, auf der Hersteller und Anbieter chinesische Waren handeln können. Das IAUs-Dialogfeld wurde auf dem Hauptbildschirm angezeigt, damit die maximale Anzahl von Benutzern damit interagieren kann. Zunächst wollten wir den Dialog nur einmal am Tag zeigen, um die Benutzer nicht von der Interaktion mit der Anwendung abzulenken.

Da A / B-Tests eine Schlüsselrolle im Lebenszyklus neuer Funktionen spielen, haben wir beschlossen, die Auswirkungen von IAUs in unserer Anwendung zu bewerten. Wir haben Benutzer zufällig in zwei nicht zusammenhängende Gruppen aufgeteilt. Die erste Gruppe war eine Kontrollgruppe ohne Verwendung von IAUs, und die zweite Gruppe war eine Testgruppe. Wir haben diesen Benutzern den IAU-Dialog gezeigt.


IAUs Flexible Flow A / B-Test in der Pandao-App.

In den letzten Versionen haben wir den Prozentsatz der aktiven Benutzer jeder Version der Anwendung gemessen. Es stellte sich heraus, dass unter den aktiven Benutzern mit der neuesten Version, die zu diesem Zeitpunkt verfügbar war, der Hauptteil aus Teilnehmern der Gruppe B bestand, dh mit der IAU-Funktion. Die violette Linie in der Grafik zeigt, dass in den ersten Tagen nach der Veröffentlichung von Version 1.29.1 die Anzahl der aktiven Benutzer mit IAUs die Anzahl der Benutzer ohne diese Funktion überschritten hat. Daher kann argumentiert werden, dass Benutzer mit IAUs die Anwendung schneller aktualisieren.


Das IAUs Flexible Flow-Dialogfeld in der Pandao-App.

Gemäß unseren Daten (siehe Grafik oben) klicken Benutzer in den ersten Tagen nach der Veröffentlichung am häufigsten auf die Bestätigungsschaltfläche im IAU-Dialogfeld. Anschließend wird die Konvertierung bis zur Veröffentlichung der nächsten Version der Anwendung ständig reduziert. Dasselbe gilt für die Schaltfläche "Installieren" im Dialogfeld, mit der die Installation des heruntergeladenen Updates gestartet wird. Daher können wir sagen, dass der durchschnittliche Conversion-Wert in beiden Fällen direkt proportional zur Häufigkeit der Veröffentlichungen ist. In Pandao erreicht die durchschnittliche Conversion innerhalb eines Monats 35% für einen Klick auf die Bestätigungsschaltfläche und 7% für einen Klick auf die Installationsschaltfläche.

Wir gehen davon aus, dass eine Verringerung des Prozentsatzes der Bestätigungen im Laufe der Zeit nur ein Problem der Benutzererfahrung darstellt, da Personen, die an der neuen Version interessiert sind, recht schnell aktualisiert werden und diejenigen, die nicht an einer Aktualisierung interessiert sind, nicht interessiert sind. Basierend auf dieser Annahme haben wir beschlossen, diejenigen, die nicht an einer Aktualisierung interessiert sind, nicht zu stören und sie nicht jeden Tag zu fragen. Es wird empfohlen, eine andere Abfragelogik zu verwenden, die auf "Veralterung" basiert. Um die Benutzer nicht zu stören, bewerten wir, wie alt die Versionen sind und wie oft wir bereits vorgeschlagen haben, sie zu aktualisieren.

Im Allgemeinen zeigten IAUs gute Ergebnisse bei A / B-Tests, daher haben wir IAUs für alle Benutzer eingeführt.

Danksagung


Vielen Dank für Ihre Hilfe beim Schreiben dieses Artikels. Marina Pleshkova Maryna_Pliashkova , Alexander Cherny alexchernyy , Ilya Nazarov RolaRko , Gleb Bodyachevsky, Daniil Polozov Jokerdab , Anastasia Kulik, Vladislav Breus und Vladislav Goldin Vladiskus .

Source: https://habr.com/ru/post/de452092/


All Articles