Invitation à passer à Android

L'invitation à la mise à niveau est un parcours utilisateur qui présente les principales nouveautés incluses dans la dernière mise à niveau majeure de l'OS Android disponible.

Ce flux est destiné à convaincre les utilisateurs de mettre à niveau leur appareil vers la dernière version de l'OS.

Lorsqu'une mise à niveau de l'OS est en attente d'approbation par l'utilisateur, celui-ci reçoit une notification push présentant les nouvelles fonctionnalités et l'invitant à effectuer la mise à niveau.

Les fabricants d'appareils peuvent activer la fonctionnalité Upgrade Party pour leurs appareils équipés de l'OS Android en envoyant le formulaire de demande d'activation d'Android Upgrade Invite.

Personnaliser l'expérience d'invitation à passer à un forfait supérieur

Vous pouvez personnaliser l'expérience d'invitation à passer à un forfait supérieur de différentes manières :

  • Supprimez les caractéristiques non pertinentes.
  • Modifiez la langue dans les blocs de texte.
  • Modifiez les animations, les couleurs et les polices pour qu'elles correspondent à votre marque.

Pour personnaliser le parcours, consultez les consignes du Guide de style pour l'invitation à la mise à niveau et incluez vos informations de personnalisation dans la réponse du formulaire.

Guide de style pour les invitations à la mise à niveau

Utilisez ce guide de style pour modifier l'apparence de l'invitation à passer à un forfait supérieur afin qu'elle corresponde à votre propre marque (écrans, couleurs, polices). Nous vous recommandons vivement de conserver les tailles et la structure proches de la conception d'origine.

Le flux d'invitation à la mise à niveau comporte les trois composants suivants :

  • Écran d'introduction
  • Écran de fonctionnalité
  • Écran de fin
Figure 1. Les trois types d'écrans du flux d'invitation à la mise à niveau

Une animation sur chaque écran vous aide à comprendre chaque fonctionnalité.

Écran d'introduction

L'écran d'introduction contient une courte animation qui souhaite la bienvenue à l'utilisateur et l'encourage à démarrer le flux affiché sur l'écran d'introduction.

Mise en page
Figure 2. Mise en page du wireframe pour l'écran d'introduction de l'invitation à passer à un forfait supérieur

L'animation de l'appareil se compose toujours des éléments suivants :

  • Arrière-plan blanc et formes colorées
  • Cadre de l'appareil
  • Contenu de l'UI
Styles

Si vous choisissez d'adapter le style Material You, vous pouvez utiliser les couleurs et les formes par défaut indiquées dans l'exemple.

Figure 3 : Jeu de couleurs par défaut pour le flux d'invitation à passer à un forfait supérieur.

Si vous utilisez votre propre couleur de marque, assurez-vous qu'elle s'accorde bien avec l'arrière-plan de l'UI.

Mouvement

Option 1 : Avec une horloge sur l'écran d'accueil

  1. Des chiffres apparaissent à l'écran.
  2. Les chiffres se déplacent vers le centre tout en diminuant de taille. Le cadre du téléphone mobile s'affiche.
  3. Le téléphone diminue de taille. Les formes commencent à entrer dans l'écran.
  4. L'animation est terminée. Les formes continuent de bouger doucement.
Figure 4. Mise en page du wireframe pour l'animation de l'écran d'introduction de l'invitation à la mise à niveau avec une horloge.
Figure 5 : Exemple d'animation pour l'écran d'introduction avec une horloge.

Option 2 : Aucune horloge sur l'écran d'accueil

  1. Le téléphone mobile entre dans le champ de vision.
  2. Le téléphone se déplace vers le centre tout en augmentant de taille. Les formes commencent à entrer dans l'écran.
  3. Le téléphone atteint sa taille maximale et les formes continuent de bouger.
Figure 6 : Mise en page du wireframe pour l'animation de l'écran d'introduction de l'invitation à la mise à niveau sans horloge.
Figure 7. Exemple d'animation pour l'écran d'introduction sans horloge.

Écran de fonctionnalité

Chaque écran de fonctionnalité met en avant une fonctionnalité du nouvel OS.

Mise en page
Figure 8 : Mise en page fil de fer des écrans de la fonctionnalité d'invitation à la mise à niveau.

L'animation de l'appareil se compose toujours des éléments suivants :

  • Arrière-plan coloré
  • Cadre de l'appareil
  • Contenu de l'UI
Styles
  • Choisissez une couleur d'arrière-plan qui s'accorde bien avec le contenu de l'UI et l'apparence générale.
  • Dans les écrans, définissez des tailles de police facilement lisibles. Si nécessaire, définissez des tailles de police plus grandes.
Mouvement

Enregistrez une animation du flux de chaque fonctionnalité, y compris les interactions tactiles. Exportez les enregistrements au format Lottie.

Écran de fin

L'écran de fin termine le processus. Il indique aux utilisateurs qu'ils ont parcouru tous les écrans.

Mise en page
Figure 9 : Disposition du wireframe pour l'écran de fin de l'invitation à passer à un forfait supérieur.

L'animation de l'appareil se compose toujours des éléments suivants :

  • Demi-cercle en arrière-plan (avec des formes animées)
  • Cadre de l'appareil
  • Contenu de l'UI
Styles
  • Sélectionnez une couleur d'arrière-plan qui s'accorde bien avec le contenu de l'UI et l'apparence générale.
  • Utilisez une forme en demi-cercle.
Mouvement

Suivez le flux d'animation standard de l'écran de fin :

  1. Le téléphone portable se déplace légèrement vers le haut.
  2. Un cercle apparaît en arrière-plan.
  3. Des formes apparaissent derrière le téléphone mobile.
  4. Les formes s'envolent de l'arrière-plan comme des confettis.
Figure 10. Mise en page du wireframe pour l'animation de l'écran de fin de l'invitation à passer à un forfait supérieur.
Figure 11. Exemple d'animation d'écran de fin.

Tester le flux d'invitation à la mise à niveau

  1. Sur l'appareil Android, accédez à Paramètres > Google > Débogage de la mise à niveau de groupe.
  2. Préparez le déclencheur d'invitation à la mise à niveau pour l'OS de l'appareil concerné (en fonction de votre version actuelle de l'OS et du flux d'invitation à la mise à niveau spécifique à tester). Soit :
    1. Cliquez sur Write Fake upgrade (current version) (Écrire une fausse mise à niveau (version actuelle)). (par exemple, si vous exécutez l'OS Android 13, le flux de test Android 13 sera déclenché)
    2. Cliquez sur Écrire la mise à niveau en attente (version actuelle + 1). (par exemple, si vous exécutez l'OS Android 12, le flux de test Android 13 sera déclenché)
    3. Cliquez sur Signaler la mise à niveau de l'OS.
  3. Cliquez sur la notification reçue ou sur Ouvrir l'invitation à passer à une édition supérieure.

Options de déclenchement pour l'invitation à passer à un forfait supérieur

Il existe trois façons différentes de déclencher le flux d'invitation à la mise à niveau : 1. Automatique 2. Diffusion 3. SDK des services Play déclenché

Automatique : notification déclenchée par Google (pour les appareils exécutant gOTA uniquement)

Pour les appareils OEM qui exécutent gOTA, l'intégration est automatique et aucune étape d'intégration d'invitation à la mise à niveau n'est requise. Une fois qu'une mise à niveau majeure de l'OS en attente est détectée, une notification push est envoyée à l'appareil depuis les services Google Play, ce qui déclenche le flux d'invitation à la mise à niveau.

Diffusion Android : notification déclenchée par Google (recommandé)

La diffusion d'application est le moyen le plus simple et le plus recommandé d'intégrer le flux d'invitation à passer à un forfait supérieur.

Un broadcast receiver vous permet de déclencher le flux d'invitation à la mise à niveau depuis votre application à l'aide d'un message de diffusion. La diffusion envoie une notification push à l'appareil depuis les services Google Play, ce qui déclenche le flux d'invitation à la mise à niveau.

Conditions préalables à la diffusion

Pour préparer votre application, procédez comme indiqué dans les sections suivantes.

Assurez-vous que les fichiers de configuration de votre application utilisent les valeurs suivantes :

  • minSdkVersion 14 ou version ultérieure
  • compileSdkVersion égal à 28 ou plus
  • A usesPermission of android.permission.RECOVERY

Envoyer l'annonce

Vous trouverez ci-dessous les instructions pour que l'application (ou le code) de l'OEM envoie une diffusion Android afin de déclencher la notification push :

  1. Envoyez la diffusion avec l'action.

    com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE
    
  2. Ajoutez le package com.google.android.gms à la diffusion.

    com.google.android.gms
    

Exigences supplémentaires

Le flux d'invitation à la mise à niveau permet également aux utilisateurs de mettre à niveau l'OS directement à partir du flux.

Pour que cela fonctionne, exposez une intention personnalisée que Google peut appeler à partir du flux d'invitation à la mise à niveau, qui déclenche le téléchargement de la mise à jour.

Exemple d'utilisation de la fonctionnalité Mégaphone

Voici un exemple de diffusion d'application :

Context context = getApplicationContext();
Intent upgradeInviteIntent = new Intent()
  .setAction( "com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE")
  .setPackage("com.google.android.gms");
  .putExtra("com.google.android.gms.growth.upgradeparty.upgradeinvite.EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER", 14);

context.sendBroadcast(updateIntent);

La valeur de la clé EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER est un entier indiquant la version de l'OS en attente (dans cet exemple, la version d'Android à installer est 14). Cette valeur permet de déterminer le flux d'invitation à la mise à niveau qui sera déclenché.

SDK des services Play : déclenchement de flux uniquement

Le SDK tiers vous permet de déclencher le flux d'invitation à la mise à niveau depuis votre application ou vos propres notifications OTA. Utilisez une API externe tierce pour activer le flux d'invitation à la mise à niveau. Cette méthode est moins recommandée.

Prérequis

Pour préparer votre application, procédez comme indiqué dans les sections suivantes.

Assurez-vous que le fichier de compilation de votre application utilise les valeurs suivantes :

  • minSdkVersion 14 ou version ultérieure
  • compileSdkVersion égal à 28 ou plus

Configurer votre application

Pour configurer votre application :

1. Extract the library from the provided .zip file, and place it in your

dépôt. 2. Ajoutez les dépendances pour le SDK Google Growth au fichier Gradle au niveau de l'application de votre module (généralement app/build.gradle) :

   dependencies {
    implementation files('<PATH_TO_BINARY>/play-services-growth-16.1.0-eap04.aar')
   }
  1. Pour fournir les dépendances du client, incluez les bibliothèques suivantes :

    com.google.android.gms:play-services-base:18.0.1
    com.google.android.gms:play-services-basement:18.0.0
    com.google.android.gms:play-services-tasks:18.0.1
    

Initialisation de l'API

  1. Pour initialiser un client, utilisez la classe UpgradeParty :

    import com.google.android.gms.growth.UpgradeParty;
    UpgradeParty.getClient(activity);
    
  2. Le paramètre d'activité doit être l'objet Activity de départ.

Fonctions de l'API

Le UpgradePartyClient obtenu expose les fonctionnalités suivantes.

isEligibleForUpgradeInvite

import com.google.android.gms.growth.UpgradeInviteEligibilityParams;

Task<Boolean> isEligibleForUpgradeInvite(UpgradeInviteEligibilityParams params);

/** Contains parameters for the eligibility query. */
class UpgradeInviteEligibilityParams {


/** Integer indicating the pending OS version (in this example, the Android version to be installed is 14). This is used to determine which Upgrade Invite flow will be triggered. */
  int pendingAndroidOsVersionNumber;
}

Renvoie une Task qui vérifie de manière asynchrone si l'utilisateur est éligible à une invitation à passer à un forfait supérieur. La valeur booléenne obtenue indique si l'utilisateur est éligible ou non.

invokeUpgradeInvite

Task<Void> invokeUpgradeInvite();

Appelle l'activité d'invitation à la mise à niveau. L'objet _Task_ résultant indique si une erreur s'est produite lors du démarrage de l'activité.

Codes d'erreur

Les deux méthodes d'API peuvent échouer avec une exception de type com.google.android.gms.common.api.ApiException. Dans ce cas, l'appelant est censé réessayer ultérieurement. Voici quelques codes d'état courants auxquels vous pouvez vous attendre :

  • INTERNAL_ERROR : pour toute erreur dans le flux de la logique sous-jacente
  • TIMEOUT : si la demande n'a pas pu être traitée dans les délais
  • API_NOT_CONNECTED : lorsque l'API n'est pas disponible (c'est-à-dire que le module UpgradeParty n'est pas encore prêt)
  • NETWORK_ERROR : la requête n'a pas pu être traitée en raison d'erreurs réseau.
  • DEVELOPER_ERROR : le package appelant n'est pas autorisé à accéder à l'API UpgradeParty.

Exemple d'utilisation du SDK

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.growth.UpgradeParty;
import com.google.android.gms.growth.UpgradePartyClient;

public class SampleActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   final UpgradePartyClient client = UpgradeParty.getClient(this);

   // Hide the invocation button initially
   View startUpgradeInviteButton = findViewById(R.id.__some_button__);
   startUpgradeInviteButton.setVisibility(View.GONE);

   // Register an onClick handler to invoke the Upgrade Party Activity
   startUpgradeInviteButton
       .setOnClickListener(
           view -> {
             client
                 .invokeUpgradeInvite()
                 .addOnCompleteListener(
                     task -> {
                       if (!task.isSuccessful()) {
                         // Do something with error, see task.getException()
                       }
                     });
           });
   }

   // Check if eligible for an Upgrade Party
   client
       .isEligibleForUpgradeInvite()
       .addOnCompleteListener(
           task -> {
             if (!task.isSuccessful()) {
               // Do something with error, see task.getException()
             } else {
                  // Show/Hide invocation button, based on the result
                  int visibility = 
                        task.getResult() ? View.VISIBLE : View.GONE;
                  startUpgradeInviteButton.setVisibility(visibility);
             }
           });
   }