Partager via


Distribution app Center – Mises à jour android dans l’application

Important

Visual Studio App Center doit être mis hors service le 31 mars 2025. Bien que vous puissiez continuer à utiliser Visual Studio App Center jusqu’à ce qu’il soit entièrement mis hors service, il existe plusieurs alternatives recommandées vers lesquelles vous pouvez envisager de migrer.

En savoir plus sur les chronologies et les alternatives de support.

App Center Distribute permet à vos utilisateurs d’installer une nouvelle version de l’application lorsque vous la distribuez via App Center. Une fois qu’une nouvelle version de l’application est disponible, le Kit de développement logiciel (SDK) présente une boîte de dialogue de mise à jour aux utilisateurs pour télécharger ou reporter la nouvelle version. Une fois qu’il choisit de mettre à jour, le KIT de développement logiciel (SDK) commence à mettre à jour votre application.

Avertissement

Google Play considère le code de mise à jour dans l’application comme un comportement malveillant, même s’il n’est pas utilisé au moment de l’exécution. Utilisez une variante du Kit de développement logiciel (SDK) Distribuer, comme indiqué dans cette section , ou supprimez complètement le KIT de développement logiciel (SDK) Distribuer qui contient le code de mise à jour dans l’application avant d’envoyer votre application à Google Play. Si vous ne le faites pas, l’application n’est pas conforme et la suppression de Google Play.

Notes

Si vous exécutez des tests d’interface utilisateur automatisés, les mises à jour dans l’application activées bloquent vos tests d’interface utilisateur automatisés, car ils essaieront de s’authentifier auprès du back-end App Center. Nous vous recommandons de ne pas activer App Center Distribute pour vos tests d’interface utilisateur.

Ajouter des mises à jour dans l’application à votre application

Suivez la section Prise en main si vous n’avez pas encore configuré et démarré le Kit de développement logiciel (SDK) dans votre application.

1. Ajouter le module Distribuer App Center

Le Kit de développement logiciel (SDK) App Center est conçu avec une approche modulaire : un développeur doit uniquement intégrer les modules des services qui l’intéressent.

  1. Ouvrez le fichier build.gradle au niveau de l’application du projet (app/build.gradle) et ajoutez les lignes suivantes après apply plugin.

    dependencies {
       def appCenterSdkVersion = '5.0.4'
       implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
    }
    

    Notes

    Si la version de votre plug-in Android Gradle est inférieure à 3.0.0, vous devez remplacer l’implémentation par compile.

  2. Enregistrez votre fichier build.gradle et veillez à déclencher une synchronisation Gradle dans Android Studio.

  3. DownloadManager est utilisé pour télécharger les mises à jour. Le Kit de développement logiciel (SDK) App Center applique TLS 1.2 pour améliorer la sécurité.

2. Démarrer App Center Distribution

Pour utiliser App Center, optez pour les modules que vous souhaitez utiliser. Par défaut, aucun module n’est démarré et vous devez appeler explicitement chacun d’eux lors du démarrage du SDK.

Ajoutez la classe Distribute à votre AppCenter.start() méthode pour démarrer le service Distribution App Center.

AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)

Vérifiez que vous avez remplacé {Your App Secret} dans l’exemple de code ci-dessus par votre secret d’application. Android Studio suggère automatiquement l’instruction d’importation requise une fois que vous avez ajouté une référence à la Distribute classe à la start() méthode, mais si vous voyez une erreur indiquant que les noms de classe ne sont pas reconnus, ajoutez les lignes suivantes aux instructions import dans votre classe d’activité :

import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute

Notes

Android 10 ou version ultérieure a des restrictions sur l’activité de lancement à partir de l’arrière-plan. Consultez l’article sur les restrictions relatives au démarrage d’activités en arrière-plan.

Notes

Les applications s’exécutant sur Android 10 (édition Go) ne peuvent pas recevoir l’autorisation SYSTEM_ALERT_WINDOW . Consultez l’article sur SYSTEM_ALERT_WINDOW sur les appareils Go.

Notes

À compter d’Android 11, ACTION_MANAGE_OVERLAY_PERMISSION les intentions amènent toujours l’utilisateur à l’écran Paramètres de niveau supérieur, où l’utilisateur peut accorder ou révoquer les SYSTEM_ALERT_WINDOW autorisations pour les applications. Consultez l’article sur les mises à jour des autorisations dans Android 11.

Préparer votre build Google Play

Google Play considère le code de mise à jour dans l’application comme un comportement malveillant, même s’il n’est pas utilisé au moment de l’exécution. Utilisez une variante du Kit de développement logiciel (SDK) Distribuer, comme indiqué dans cette section, ou supprimez complètement le KIT de développement logiciel (SDK) Distribuer qui contient le code de mise à jour dans l’application avant d’envoyer votre application à Google Play. Si vous ne le faites pas, l’application n’est pas conforme et la suppression de Google Play. Pour faciliter la tâche, nous fournissons la version du KIT de développement logiciel (SDK) App Center Distribute avec des API stoubées. La seule modification pour vous est donc un échange de dépendances.

  1. Ouvrez le fichier build.gradle au niveau de l’application du projet (app/build.gradle).

  2. Configurez des variantes de build en ajoutant des saveurs de produit :

    android {
        flavorDimensions "distribute"
        productFlavors {
            appCenter {
                dimension "distribute"
            }
            googlePlay {
                dimension "distribute"
            }
        }
    }
    
  3. Modifier le bloc de dépendances pour consommer différentes dépendances en fonction de la saveur du produit :

    dependencies {
        def appCenterSdkVersion = "5.0.4"
        appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}"
        googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}"
    }
    
  4. Enregistrez votre fichier build.gradle et veillez à déclencher une synchronisation Gradle dans Android Studio.

  5. Vous pouvez modifier la variante de build dans le menu déroulant Générer > sélectionner un variant de build ou Générer des variantes dans la barre de fenêtre d’outils.

Vous pouvez en savoir plus sur la configuration des variantes de build dans la documentation Android.

Utiliser un groupe de distribution privé

Par défaut, Distribute utilise un groupe de distribution public. Si vous souhaitez utiliser un groupe de distribution privé, vous devez le définir explicitement via setUpdateTrack l’API.

Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)

Notes

La valeur par défaut est UpdateTrack.PUBLIC. Cette méthode ne peut être appelée qu’avant l’appel de AppCenter.start méthode. Les modifications apportées à la piste de mise à jour ne sont pas conservées lorsque le processus d’application redémarre. Par conséquent, si la méthode n’est pas toujours appelée avant l’appel AppCenter.start , elle sera publique, par défaut.

Lorsque l’application est au premier plan (après Distribute.setUpdateTrack(UpdateTrack.PRIVATE); et AppCenter.start), une fenêtre de navigateur s’ouvre pour authentifier l’utilisateur. Toutes les vérifications de mise à jour suivantes obtiennent la dernière version sur la voie privée.

Si un utilisateur est sur la piste privée, cela signifie qu’une fois l’authentification réussie, il obtient la dernière version de tous les groupes de distribution privés dont il est membre. Si un utilisateur est sur la voie publique, cela signifie qu’il obtiendra la dernière version de n’importe quel groupe de distribution public.

Désactiver la vérification automatique de la mise à jour

Par défaut, le Kit de développement logiciel (SDK) recherche automatiquement les nouvelles versions :

  • Lorsque l’application démarre.
  • Lorsque l’application passe au premier plan après avoir atteint l’arrière-plan.
  • Lors de l’activation du module Distribuer s’il était précédemment désactivé.

Si vous souhaitez case activée pour les nouvelles versions manuellement, vous pouvez désactiver les case activée automatiques pour la mise à jour. Pour ce faire, appelez la méthode suivante avant le démarrage du Kit de développement logiciel (SDK) :

Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()

Notes

Cette méthode doit être appelée avant l’appel de méthode AppCenter.start .

Vous pouvez ensuite utiliser l’API checkForUpdate , qui est décrite dans la section suivante.

Rechercher manuellement la mise à jour

Distribute.checkForUpdate();
Distribute.checkForUpdate()

Cela envoie une requête à App Center et affiche une boîte de dialogue de mise à jour au cas où une nouvelle version est disponible.

Notes

Une case activée manuelle pour l’appel de mise à jour fonctionne même lorsque les mises à jour automatiques sont activées. Une case activée manuelle pour la mise à jour est ignorée si une autre case activée est déjà effectuée. La case activée manuelle pour la mise à jour ne sera pas traitée si l’utilisateur a différé les mises à jour (sauf si la dernière version est une mise à jour obligatoire).

Personnaliser ou localiser la boîte de dialogue de mise à jour dans l’application

1. Personnaliser ou localiser du texte

Vous pouvez facilement fournir vos propres chaînes de ressources si vous souhaitez modifier ou localiser le texte affiché dans la boîte de dialogue de mise à jour. Examinez les fichiers de chaîne dans ce fichier de ressources. Utilisez le même nom/clé de chaîne et spécifiez la valeur localisée à refléter dans la boîte de dialogue dans vos propres fichiers de ressources d’application.

2. Personnaliser la boîte de dialogue de mise à jour

Vous pouvez personnaliser l’apparence de la boîte de dialogue de mise à jour par défaut en implémentant l’interface DistributeListener . Vous devez inscrire l’écouteur avant d’appeler AppCenter.start , comme indiqué dans l’exemple suivant :

Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)

Voici un exemple d’implémentation de l’écouteur qui remplace la boîte de dialogue sdk par une boîte de dialogue personnalisée :

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.net.Uri;

import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.distribute.DistributeListener;
import com.microsoft.appcenter.distribute.ReleaseDetails;
import com.microsoft.appcenter.distribute.UpdateAction;

public class MyDistributeListener implements DistributeListener {

    @Override
    public boolean onReleaseAvailable(Activity activity, ReleaseDetails releaseDetails) {

        // Look at releaseDetails public methods to get version information, release notes text or release notes URL
        String versionName = releaseDetails.getShortVersion();
        int versionCode = releaseDetails.getVersion();
        String releaseNotes = releaseDetails.getReleaseNotes();
        Uri releaseNotesUrl = releaseDetails.getReleaseNotesUrl();

        // Build our own dialog title and message
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
        dialogBuilder.setTitle("Version " + versionName + " available!"); // you should use a string resource instead, this is just a simple example
        dialogBuilder.setMessage(releaseNotes);

        // Mimic default SDK buttons
        dialogBuilder.setPositiveButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                // This method is used to tell the SDK what button was clicked
                Distribute.notifyUpdateAction(UpdateAction.UPDATE);
            }
        });

        // We can postpone the release only if the update isn't mandatory
        if (!releaseDetails.isMandatoryUpdate()) {
            dialogBuilder.setNegativeButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    // This method is used to tell the SDK what button was clicked
                    Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
                }
            });
        }
        dialogBuilder.setCancelable(false); // if it's cancelable you should map cancel to postpone, but only for optional updates
        dialogBuilder.create().show();

        // Return true if you're using your own dialog, false otherwise
        return true;
    }
    
    @Override
    public void onNoReleaseAvailable(Activity activity) {
        Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show();
    }
}
import android.app.Activity
import android.app.AlertDialog
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails
import com.microsoft.appcenter.distribute.UpdateAction

class MyDistributeListener : DistributeListener {

    override fun onReleaseAvailable(activity: Activity, releaseDetails: ReleaseDetails): Boolean {

        // Look at releaseDetails public methods to get version information, release notes text or release notes URL
        val versionName = releaseDetails.shortVersion
        val versionCode = releaseDetails.version
        val releaseNotes = releaseDetails.releaseNotes
        val releaseNotesUrl = releaseDetails.releaseNotesUrl

        // Build our own dialog title and message
        val dialogBuilder = AlertDialog.Builder(activity)
        dialogBuilder.setTitle("Version $versionName available!") // you should use a string resource instead, this is just a simple example
        dialogBuilder.setMessage(releaseNotes)

        // Mimic default SDK buttons
        dialogBuilder.setPositiveButton(
            com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download
        ) { dialog, which ->
            // This method is used to tell the SDK what button was clicked
            Distribute.notifyUpdateAction(UpdateAction.UPDATE)
        }

        // We can postpone the release only if the update isn't mandatory
        if (!releaseDetails.isMandatoryUpdate) {
            dialogBuilder.setNegativeButton(
                com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone
            ) { dialog, which ->
                // This method is used to tell the SDK what button was clicked
                Distribute.notifyUpdateAction(UpdateAction.POSTPONE)
            }
        }
        dialogBuilder.setCancelable(false) // if it's cancelable you should map cancel to postpone, but only for optional updates
        dialogBuilder.create().show()

        // Return true if you're using your own dialog, false otherwise
        return true
    }

    override fun onNoReleaseAvailable(activity: Activity) {
        Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show()
    }
}

Comme indiqué dans l’exemple, vous devez appeler Distribute.notifyUpdateAction(UpdateAction.UPDATE); ou Distribute.notifyUpdateAction(UpdateAction.POSTPONE); si votre écouteur retourne true.

Si vous n’appelez notifyUpdateActionpas , le rappel se répète à chaque modification d’activité.

L’écouteur peut être appelé à nouveau avec la même version si l’activité change avant que l’action utilisateur ne soit avertie au SDK.

Ce comportement est nécessaire pour couvrir les scénarios suivants :

  • Votre application est envoyée à l’arrière-plan (par exemple en appuyant sur ACCUEIL) puis reprise dans une autre activité.
  • Votre activité est couverte par une autre sans quitter l’application (par exemple, cliquer sur certaines notifications).
  • Autres scénarios similaires.

Dans ce cas, l’activité hébergeant la boîte de dialogue peut être remplacée sans intervention de l’utilisateur. Par conséquent, le Kit de développement logiciel (SDK) appelle à nouveau l’écouteur afin que vous puissiez restaurer la boîte de dialogue personnalisée.

Dans les cas où le Kit de développement logiciel (SDK) recherche des mises à jour et ne trouve aucune mise à jour disponible plus récente que celle actuellement utilisée, un onNoReleaseAvailable rappel de DistributeListener l’interface est appelé. Cela vous permet d’exécuter du code personnalisé dans de tels scénarios. L’exemple ci-dessus montre comment afficher un message toast lorsqu’aucune mise à jour n’est trouvée.

Activer ou désactiver App Center Distribuer au moment de l’exécution

Vous pouvez activer et désactiver La distribution d’App Center au moment de l’exécution. Si vous le désactivez, le Kit de développement logiciel (SDK) ne fournit aucune fonctionnalité de mise à jour dans l’application, mais vous pouvez toujours utiliser le service Distribuer dans le portail App Center.

Distribute.setEnabled(false);
Distribute.setEnabled(false)

Pour réactiver App Center Distribute, utilisez la même API, mais passez true en tant que paramètre.

Distribute.setEnabled(true);
Distribute.setEnabled(true)

L’état est conservé dans le stockage de l’appareil entre les lancements d’application.

Cette API est asynchrone. Vous pouvez en savoir plus à ce sujet dans notre guide des API asynchrones App Center .

Notes

Cette méthode ne doit être utilisée qu’après Distribute le démarrage.

Vérifier si App Center Distribute est activé

Vous pouvez également case activée si App Center Distribute est activé ou non :

Distribute.isEnabled();
Distribute.isEnabled()

Cette API est asynchrone. Vous pouvez en savoir plus à ce sujet dans notre guide des API asynchrones App Center .

Notes

Cette méthode ne doit être utilisée qu’après Distribute avoir démarré. Elle sera toujours retournée false avant le début.

Activer les mises à jour dans l’application pour les builds de débogage

Par défaut, App Center active les mises à jour dans l’application uniquement pour les versions en version.

Pour activer les mises à jour dans l’application dans les builds de débogage, appelez la méthode suivante avant AppCenter.start:

Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)

Notes

Cette méthode affecte uniquement les builds de débogage et n’a aucun impact sur les builds en version. La build de débogage signifie que l’indicateur android:debuggable est défini sur true (qui est généralement défini automatiquement par des variantes de build de débogage prédéfinies gradle). Sinon, il s’agit d’une build de mise en production.

Comment fonctionnent les mises à jour dans l’application ?

Notes

Pour que les mises à jour dans l’application fonctionnent, une build d’application doit être téléchargée à partir du lien. Il ne fonctionnera pas s’il est installé à partir d’un IDE ou manuellement.

La fonctionnalité de mises à jour dans l’application fonctionne comme suit :

  1. Cette fonctionnalité fonctionne uniquement avec les builds RELEASE (par défaut) qui sont distribuées à l’aide du service De distribution App Center .

  2. Une fois que vous avez intégré le Kit de développement logiciel (SDK), généré la version de votre application et que vous avez téléchargé dans App Center, les utilisateurs de ce groupe de distribution sont avertis de la nouvelle version par e-mail.

  3. Lorsque chaque utilisateur ouvre le lien dans son e-mail, l’application est installée sur son appareil. Il est important qu’ils utilisent le lien d’e-mail pour installer. Nous ne prenons pas en charge le chargement latéral. Lorsqu’une application est téléchargée à partir du lien, le KIT de développement logiciel (SDK) enregistre des informations importantes à partir des cookies pour case activée pour les mises à jour ultérieures. Sinon, le KIT de développement logiciel (SDK) n’a pas ces informations clés.

  4. Si l’application définit la piste sur privée, un navigateur s’ouvre pour authentifier l’utilisateur et activer les mises à jour dans l’application. Le navigateur ne s’ouvre pas à nouveau tant que les informations d’authentification restent valides, même lors du basculement vers la voie publique et de revenir à la voie privée ultérieurement. Si l’authentification du navigateur réussit, l’utilisateur est redirigé automatiquement vers l’application. Si la piste est publique (ce qui est la valeur par défaut), l’étape suivante se produit directement.

  5. Une nouvelle version de l’application affiche la boîte de dialogue de mise à jour dans l’application demandant aux utilisateurs de mettre à jour votre application s’il s’agit des éléments suivants :

    • une valeur plus élevée de versionCode ou
    • une valeur égale de versionCode , mais une valeur différente de versionName.

Conseil

Si vous chargez le même FICHIER APK une deuxième fois, la boîte de dialogue n’apparaîtra PAS , car les versions sont identiques.

Comment faire tester les mises à jour dans l’application ?

Vous devez charger les builds de mise en production (qui utilisent le module Distribuer du Kit de développement logiciel (SDK) App Center) sur le portail App Center pour tester les mises à jour dans l’application, ce qui augmente le nombre de versions à chaque fois.

  1. Créez votre application dans le portail App Center si ce n’est déjà fait.
  2. Créez un groupe de distribution et nommez-le afin de reconnaître qu’il est destiné à tester la fonctionnalité de mise à jour dans l’application.
  3. Ajoutez vous-même (ou toutes les personnes que vous souhaitez inclure dans votre test de la fonctionnalité de mise à jour dans l’application). Utilisez une nouvelle adresse e-mail ou une adresse e-mail qui n’a pas été utilisée pour cette application sur App Center. Cela garantit que votre expérience est proche de celle de vos vrais testeurs.
  4. Créez une nouvelle build de votre application qui inclut App Center Distribute et contient la logique d’installation décrite ci-dessus. Si le groupe est privé, n’oubliez pas de définir la piste de mise à jour privée dans l’application avant de commencer à utiliser l’API setUpdateTrack.
  5. Cliquez sur le bouton Distribuer la nouvelle version dans le portail et chargez votre build de l’application.
  6. Une fois le chargement terminé, cliquez sur Suivant et sélectionnez le groupe de distribution que vous avez créé comme destination de cette distribution d’application.
  7. Passez en revue la distribution et distribuez la build à votre groupe de test dans l’application.
  8. Personnes de ce groupe recevront une invitation à être testeurs de l’application. Une fois qu’ils ont accepté l’invitation, ils peuvent télécharger l’application à partir du portail App Center à partir de leur appareil mobile. Une fois les mises à jour dans l’application installées, vous êtes prêt à tester les mises à jour dans l’application.
  9. Tamponner le versionCode de votre application.
  10. Générez la version de mise en production de votre application et chargez une nouvelle build de votre application comme vous l’avez fait à l’étape précédente et distribuez-la au groupe de distribution que vous avez créé précédemment. Les membres du groupe de distribution seront invités à entrer une nouvelle version au prochain démarrage de l’application.

Conseil

Consultez les informations sur l’utilisation d’App Center Distribute pour plus d’informations sur les groupes de distribution , etc. Bien qu’il soit possible d’utiliser App Center Distribute pour distribuer une nouvelle version de votre application sans ajouter de code, l’ajout d’App Center Distribute au code de votre application permettra à vos testeurs et utilisateurs de bénéficier de l’expérience de mise à jour dans l’application.