Mises à jour intégrées à l'application: accélération des mises à jour des applications Android



Parmi la variété d'outils annoncés lors d' Android Dev Summit , je voudrais porter une attention particulière au mécanisme de mise à jour de l'application In-App Updates (IAUs), qui aide les développeurs à accélérer l'ajout de nouvelles fonctionnalités, des corrections de bugs et des améliorations de performances. Étant donné que cette fonctionnalité a été publiée après Google I / O 2019, dans cet article, je vais parler en détail des IAU, décrire les schémas d'implémentation recommandés et donner quelques exemples de code. Je parlerai également de notre expérience d'intégration des UAI dans Pandao , une application de commande de marchandises en provenance de Chine.

La nouvelle API permet aux développeurs de lancer une mise à jour de l'application vers la dernière version disponible sur Google Play. De cette façon, les UAI complètent le mécanisme de mise à jour automatique existant de Google Play. Les UAI contiennent plusieurs schémas d'implémentation qui sont fondamentalement différents en termes d'interaction avec l'utilisateur.

  1. Flexible Flow propose aux utilisateurs de télécharger la mise à jour en arrière-plan et de l'installer à un moment qui lui convient. Il est destiné aux cas où les utilisateurs peuvent toujours utiliser l'ancienne version, mais une nouvelle est déjà disponible.


  2. Immediate Flow nécessite que les utilisateurs téléchargent et installent la mise à jour avant de continuer à utiliser l'application. Il est destiné aux cas où il est essentiel que les développeurs mettent à jour l'application.



Étant donné que la deuxième option n'est pas si importante et moins adaptée à l'application Pandao, nous analyserons le scénario Flexible Flow plus en détail.

Intégration flexible des flux de l'AIU


Cas d'utilisation


Le processus de mise à niveau à l'aide d'IAU comprend plusieurs étapes.

  1. Une application utilisant la bibliothèque Play Core, qui vérifie sur Google Play si des mises à jour sont disponibles.
  2. Si tel est le cas, l'application demande à Google Play d'afficher la boîte de dialogue des IAU. Google Play affiche à l'utilisateur une boîte de dialogue avec une proposition de mise à jour.
  3. Si l'utilisateur est d'accord, Google Play en arrière-plan télécharge la mise à jour, montrant à l'utilisateur dans la barre d'état la progression du téléchargement.
  4. Si le téléchargement est terminé lorsque l'application s'exécute en arrière-plan, Google Play terminera automatiquement l'installation. Si l'application est active à ce moment, dans de tels cas, il est nécessaire de déterminer votre propre logique de fin d'installation. Considérez les scénarios suivants.
    1. L'application démarre le processus d'installation en affichant à l'utilisateur une boîte de dialogue Google Play avec un indicateur de progression. Une fois l'installation terminée, une version mise à jour de l'application est lancée. Dans ce cas, il est recommandé d'afficher une boîte de dialogue supplémentaire qui permet à l'utilisateur de confirmer qu'il est prêt à redémarrer l'application maintenant. Il s'agit du schéma d'implémentation recommandé .
    2. L'application attend jusqu'à ce qu'elle soit en arrière-plan, puis termine la mise à jour. D'une part, il s'agit d'un comportement moins intrusif du point de vue de l'UX, car l'interaction de l'utilisateur avec l'application n'est pas interrompue. Mais d'un autre côté, cela nécessite que le développeur implémente la logique pour déterminer si l'application est en arrière-plan.

Si l'installation de la mise à jour téléchargée n'est pas terminée, Google Play peut terminer l'installation en arrière-plan. Cette option est préférable de ne pas utiliser explicitement, car elle ne garantit pas l'installation de la mise à jour.

Exigences de test de base


Pour terminer manuellement l'ensemble du processus de mise à jour sur un périphérique de test, vous devez disposer d'au moins deux versions de l'application avec des numéros d'assembly différents: source et cible .

  • La version originale avec un numéro plus élevé doit être publiée sur Google Play, elle sera identifiée par Google Play comme une mise à jour disponible. La version cible avec un numéro de build inférieur et des unités IAU intégrées doit être installée sur l'appareil, nous la mettrons à jour. L'essentiel est que lorsque l'application demande à Google Play de rechercher une mise à jour, elle compare les numéros d'assemblage de la version installée et disponible. Les IAU ne seront donc lancées que si le numéro de build sur Google Play est supérieur à la version actuelle de l'appareil.
  • Les versions source et cible doivent avoir le même nom de package et doivent être signées avec le même certificat de version .
  • Android 5.0 (API niveau 21) ou supérieur.
  • Jouez à la bibliothèque Core 1.5.0 ou supérieure.

Exemple de code


Ici, nous examinons un exemple de code pour utiliser IAUs Flexible Flow, qui peut également être trouvé dans la documentation officielle . Vous devez d'abord ajouter la bibliothèque Play Core au fichier build.gradle au niveau du module.

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

Créez ensuite une instance d' AppUpdateManager et ajoutez une fonction de rappel à AppUpdateInfo , qui renverra des informations sur la disponibilité de la mise à jour, l'objet pour démarrer la mise à jour (si disponible) et la progression du téléchargement en cours, s'il a déjà commencé.

 // 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. } 

Pour afficher la boîte de dialogue de demande de mise à jour de Google Play, vous devez transmettre l'objet AppUpdateInfo reçu à la méthode 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 ) 

Pour surveiller l'état de la mise à jour, vous pouvez ajouter l'écouteur d'événements InstallStateUpdatedListener au gestionnaire IAUs.

 // 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) 

Dès que la mise à jour est téléchargée (état DOWNLOADED ), vous devez redémarrer l'application pour terminer la mise à jour. Le redémarrage peut être lancé en appelant appUpdateManager.completeUpdate() , mais avant cela, il est recommandé d'afficher une boîte de dialogue afin que l'utilisateur confirme explicitement qu'il est prêt à redémarrer l'application.

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

Erreur "La mise à jour n'est pas disponible"


Tout d'abord, revérifiez la conformité aux exigences répertoriées dans la section Exigences de mise en œuvre de base. Si vous avez tout fait, mais que la mise à jour en fonction de l'appel onSuccess n'est toujours pas disponible, le problème peut être onSuccess à la mise en cache. Il est probable que l'application Google Play ne soit pas au courant de la mise à jour disponible en raison du mécanisme de mise en cache interne. Pour éviter cela lors des tests manuels, vous pouvez forcer une réinitialisation du cache en accédant à la page "Mes applications et jeux" sur Google Play. Ou vous pouvez simplement vider le cache dans les paramètres de l'application Google Play. Veuillez noter que ce problème se produit uniquement pendant les tests, il ne devrait pas affecter les utilisateurs finaux, car leur cache est toujours mis à jour quotidiennement.

Flux flexible de l'AIU dans l'application Pandao


Nous avons participé à un programme d'accès anticipé et intégré l'UAI Flexible Flow (mise en œuvre recommandée) dans l'application Pandao, une plate-forme sur laquelle les fabricants et les vendeurs peuvent échanger des produits chinois. La boîte de dialogue IAUs était affichée sur l'écran principal afin que le nombre maximum d'utilisateurs puisse interagir avec elle. Initialement, nous voulions montrer le dialogue pas plus d'une fois par jour, afin de ne pas distraire les gens d'interagir avec l'application.

Étant donné que les tests A / B jouent un rôle clé dans le cycle de vie de toute nouvelle fonctionnalité, nous avons décidé d'évaluer l'effet des UAI dans notre application. Nous avons divisé au hasard les utilisateurs en deux groupes disjoints. Le premier était un contrôle, sans utiliser d'IAU, et le second était un test, nous avons montré le dialogue des IAU à ces utilisateurs.


Test Flexible Flow A / B de l'AIU dans l'application Pandao.

Au cours des dernières versions, nous avons mesuré le pourcentage d'utilisateurs actifs de chaque version de l'application. Il s'est avéré que parmi les utilisateurs actifs disposant de la dernière version disponible à l'époque, l'essentiel était composé de participants du groupe B, c'est-à-dire avec la fonction IAU. La ligne violette dans le graphique montre que dans les premiers jours après la publication de la version 1.29.1, le nombre d'utilisateurs actifs avec des unités AIU a dépassé le nombre d'utilisateurs sans cette fonction. Par conséquent, on peut affirmer que les utilisateurs dotés d'unités IAU mettent à jour l'application plus rapidement.


La boîte de dialogue Flexible Flow de l'AIU dans l'application Pandao.

Selon nos données (voir le graphique ci-dessus), les utilisateurs cliquent le plus souvent sur le bouton de confirmation dans la boîte de dialogue IAUs dans les premiers jours après la sortie, puis la conversion est constamment réduite jusqu'à la publication de la prochaine version de l'application. La même chose est observée avec le bouton d'installation dans la boîte de dialogue, qui lance l'installation de la mise à jour téléchargée. Par conséquent, nous pouvons dire que la valeur de conversion moyenne dans les deux cas est directement proportionnelle à la fréquence des rejets. À Pandao, la conversion moyenne en un mois atteint 35% pour un clic sur le bouton de confirmation et 7% pour un clic sur le bouton d'installation.

Nous supposons qu'une diminution du pourcentage de confirmations au fil du temps n'est qu'un problème d'expérience utilisateur, car les personnes intéressées par la nouvelle version se mettront à jour assez rapidement, et celles qui ne sont pas intéressées par la mise à jour ne seront pas intéressées. Sur la base de cette hypothèse, nous avons décidé de ne pas déranger ceux qui ne sont pas intéressés par la mise à jour, et de ne pas leur demander tous les jours. Il est recommandé d'utiliser une logique de requête différente, basée sur «l'obsolescence», c'est-à-dire que, afin de ne pas déranger les utilisateurs, nous évaluons leur ancienne version et la fréquence à laquelle nous avons déjà suggéré de la mettre à jour.

En général, les IAU ont montré de bons résultats lors des tests A / B, nous avons donc déployé les IAU pour tous les utilisateurs.

Remerciements


Merci de votre aide pour la rédaction de cet article Marina Pleshkova Maryna_Pliashkova , Alexander Cherny alexchernyy , Ilya Nazarov RolaRko , Gleb Bodyachevsky, Daniil Polozov jokerdab , Anastasia Kulik, Vladislav Breus et Vladislav Goldin Vladiskus .

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


All Articles