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.
Ouvrez le fichier build.gradle au niveau de l’application du projet (
app/build.gradle
) et ajoutez les lignes suivantes aprèsapply 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.
Enregistrez votre fichier build.gradle et veillez à déclencher une synchronisation Gradle dans Android Studio.
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.
Ouvrez le fichier build.gradle au niveau de l’application du projet (
app/build.gradle
).Configurez des variantes de build en ajoutant des saveurs de produit :
android { flavorDimensions "distribute" productFlavors { appCenter { dimension "distribute" } googlePlay { dimension "distribute" } } }
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}" }
Enregistrez votre fichier build.gradle et veillez à déclencher une synchronisation Gradle dans Android Studio.
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 notifyUpdateAction
pas , 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 :
Cette fonctionnalité fonctionne uniquement avec les builds RELEASE (par défaut) qui sont distribuées à l’aide du service De distribution App Center .
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.
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.
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.
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 deversionName
.
- une valeur plus élevée de
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.
- Créez votre application dans le portail App Center si ce n’est déjà fait.
- 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.
- 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.
- 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.
- Cliquez sur le bouton Distribuer la nouvelle version dans le portail et chargez votre build de l’application.
- 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.
- Passez en revue la distribution et distribuez la build à votre groupe de test dans l’application.
- 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.
- Tamponner le
versionCode
de votre application. - 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.