Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Visual Studio App Center wurde am 31. März 2025 eingestellt, mit Ausnahme der Analyse- und Diagnosefeatures, die bis zum 30. Juni 2026 weiterhin unterstützt werden. Weitere Informationen
Mit App Center Distribute können Ihre Benutzer eine neue Version der App installieren, wenn Sie sie über Das App Center verteilen. Wenn eine neue Version der App verfügbar ist, zeigt das SDK den Benutzern ein Updatedialogfeld an, um die neue Version herunterzuladen oder zu verschieben. Nachdem sie sich für die Aktualisierung entschieden haben, beginnt das SDK mit dem Aktualisieren Ihrer Anwendung.
Warnung
Google Play betrachtet den In-App-Updatecode als böswilliges Verhalten, auch wenn er zur Laufzeit nicht verwendet wird. Verwenden Sie eine Variante des Distribute SDK wie in diesem Abschnitt beschrieben, oder entfernen Sie das Distribute SDK, das In-App-Updatecode enthält, bevor Sie Ihre App an Google Play übermitteln. Das Versäumnis kann zu Nichteinhaltung führen und die Entfernung der App von Google Play zur Folge haben.
Hinweis
Wenn Sie automatisierte UI-Tests ausführen, blockieren aktivierte In-App-Updates Ihre automatisierten UI-Tests, da sie versuchen, sich beim App Center-Back-End zu authentifizieren. Es wird empfohlen, app Center-Verteilung für Ihre UI-Tests nicht zu aktivieren.
Hinzufügen von In-App-Updates zu Ihrer App
Folgen Sie dem Abschnitt " Erste Schritte ", wenn Sie das SDK in Ihrer Anwendung noch nicht eingerichtet und gestartet haben.
1. Hinzufügen des App Center-Moduls "Verteilen"
Das App Center SDK ist mit einem modularen Ansatz konzipiert – ein Entwickler muss nur die Module der Dienste integrieren, an denen sie interessiert sind.
Öffnen Sie die Datei build.gradle (
app/build.gradle
) auf App-Ebene des Projekts, und fügen Sie die folgenden Zeilen nachapply plugin
.dependencies { def appCenterSdkVersion = '5.0.6' implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" }
Hinweis
Wenn die Version Ihres Android Gradle-Plug-Ins niedriger als 3.0.0 ist, müssen Sie die Implementierung durch kompilieren ersetzen.
Speichern Sie die Datei "build.gradle ", und stellen Sie sicher, dass Sie eine Gradle-Synchronisierung in Android Studio auslösen.
DownloadManager wird zum Herunterladen von Updates verwendet. Das App Center SDK erzwingt TLS 1.2 zur Verbesserung der Sicherheit.
2. App Center Distribute starten
Um Das App Center zu verwenden, melden Sie sich für die Module an, die Sie verwenden möchten. Standardmäßig werden keine Module gestartet, und sie müssen beim Starten des SDK explizit aufgerufen werden.
Fügen Sie die Distribute-Klasse zu Ihrer AppCenter.start()
Methode hinzu, um den App Center-Verteilungsdienst zu starten.
AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)
Stellen Sie sicher, dass Sie im obigen Codebeispiel durch Ihren App-Geheimschlüssel ersetzt {Your App Secret}
haben. Android Studio schlägt automatisch die erforderliche Importanweisungen vor, nachdem Sie der Methode einen Verweis auf die Distribute
start()
Klasse hinzugefügt haben. Wenn jedoch ein Fehler angezeigt wird, dass die Klassennamen nicht erkannt werden, fügen Sie die folgenden Zeilen zu den Importanweisungen in Ihrer Aktivitätsklasse hinzu:
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute
Hinweis
Android 10 oder höher hat Einschränkungen für die Startaktivität aus dem Hintergrund. Weitere Informationen zu Einschränkungen beim Starten von Aktivitäten aus dem Hintergrund finden Sie im Artikel.
Hinweis
Apps, die unter Android 10 (Go Edition) ausgeführt werden, können die SYSTEM_ALERT_WINDOW Berechtigung nicht erhalten. Weitere Informationen zu SYSTEM_ALERT_WINDOW auf Go-Geräten finden Sie im Artikel.
Hinweis
Ab Android 11 führen ACTION_MANAGE_OVERLAY_PERMISSION
Intents den Benutzer immer zum Startbildschirm der Einstellungen, wo der Benutzer die SYSTEM_ALERT_WINDOW
Berechtigungen für Apps erteilen oder widerrufen kann. Bitte lesen Sie den Artikel über Berechtigungsupdates in Android 11.
Vorbereitung Ihres Google Play-Builds
Google Play betrachtet den In-App-Updatecode als böswilliges Verhalten, auch wenn er zur Laufzeit nicht verwendet wird. Verwenden Sie eine Variante des Distribute SDK wie in diesem Abschnitt beschrieben, oder entfernen Sie das Distribute SDK, das In-App-Updatecode enthält, bevor Sie Ihre App an Google Play übermitteln. Bei Nichtbeachtung kann es dazu führen, dass die App nicht den Vorschriften entspricht und aus Google Play entfernt wird. Um dies zu vereinfachen, stellen wir die Version des App Center Distribute SDK mit stubbed-APIs bereit, sodass die einzige Änderung für Sie ein Abhängigkeitstausch ist.
Öffnen Sie die Datei "build.gradle " auf Projektebene (
app/build.gradle
).Konfigurieren Sie Buildvarianten, indem Sie Produktvarianten hinzufügen.
android { flavorDimensions "distribute" productFlavors { appCenter { dimension "distribute" } googlePlay { dimension "distribute" } } }
Ändern Sie den Abhängigkeitsblock, um unterschiedliche Abhängigkeiten basierend auf dem Produktgeschmack zu nutzen:
dependencies { def appCenterSdkVersion = "5.0.6" appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}" }
Speichern Sie die Datei "build.gradle ", und stellen Sie sicher, dass Sie eine Gradle-Synchronisierung in Android Studio auslösen.
Sie können die Buildvariante im > Dropdownmenü "Build Select Build Variant" oder "Build Variants" in der Symbolleiste ändern.
Weitere Informationen zum Konfigurieren von Buildvarianten finden Sie in der Android-Dokumentation.
Private Verteilergruppe verwenden
Standardmäßig verwendet "Verteilen" eine öffentliche Verteilergruppe. Wenn Sie eine private Verteilergruppe verwenden möchten, müssen Sie sie explizit über setUpdateTrack
die API festlegen.
Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)
Hinweis
Der Standardwert ist UpdateTrack.PUBLIC
. Diese Methode kann nur vor dem AppCenter.start
Methodenaufruf aufgerufen werden. Änderungen an der Aktualisierungsspur werden nicht beibehalten, wenn der Anwendungsprozess neu gestartet wird. Wenn die Methode also nicht immer vor dem AppCenter.start
Aufruf aufgerufen wird, ist sie standardmäßig öffentlich.
Wenn sich die App im Vordergrund befindet (nach Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
und AppCenter.start
), wird ein Browserfenster geöffnet, um den Benutzer zu authentifizieren. Alle nachfolgenden Updateprüfungen erhalten die neueste Version auf dem privaten Track.
Wenn sich ein Benutzer auf der privaten Spur befindet, bedeutet dies, dass er nach der erfolgreichen Authentifizierung die neueste Version von allen privaten Verteilergruppen erhält, in denen er Mitglied ist. Wenn sich ein Benutzer auf der öffentlichen Spur befindet, bedeutet dies, dass er die neueste Version einer beliebigen öffentlichen Verteilergruppe erhält.
Automatische Überprüfung auf Update deaktivieren
Standardmäßig sucht das SDK automatisch nach neuen Versionen:
- Wenn die Anwendung gestartet wird.
- Wenn die Anwendung nach dem Wechseln zum Hintergrund in den Vordergrund wechselt.
- Wenn Sie das Modul "Verteilen" aktivieren, wenn das Modul zuvor deaktiviert wurde.
Wenn Sie manuell nach neuen Versionen suchen möchten, können Sie die automatische Überprüfung auf Updates deaktivieren. Rufen Sie dazu vor dem SDK-Start die folgende Methode auf:
Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()
Hinweis
Diese Methode muss vor dem AppCenter.start
Methodenaufruf aufgerufen werden.
Anschließend können Sie die checkForUpdate
API verwenden, die im folgenden Abschnitt beschrieben wird.
Manuelles Überprüfen auf Update
Distribute.checkForUpdate();
Distribute.checkForUpdate()
Dadurch wird eine Anforderung an das App Center gesendet und ein Updatedialogfeld angezeigt, falls eine neue Version verfügbar ist.
Hinweis
Eine manuelle Überprüfung auf Updateanrufe funktioniert auch dann, wenn automatische Updates aktiviert sind. Eine manuelle Überprüfung auf Aktualisierung wird ignoriert, wenn bereits eine andere Überprüfung durchgeführt wird. Die manuelle Überprüfung auf Das Update wird nicht verarbeitet, wenn der Benutzer Updates verschoben hat (es sei denn, die neueste Version ist ein obligatorisches Update).
Anpassen oder Lokalisieren des In-App-Aktualisierungsdialogfelds
1. Anpassen oder Lokalisieren von Text
Sie können ganz einfach eigene Ressourcenzeichenfolgen bereitstellen, wenn Sie den im Aktualisierungsdialogfeld angezeigten Text ändern oder lokalisieren möchten. Sehen Sie sich die Zeichenfolgendateien in dieser Ressourcendatei an. Verwenden Sie denselben Zeichenfolgennamen/Schlüssel, und geben Sie den lokalisierten Wert an, der im Dialogfeld in Ihren eigenen App-Ressourcendateien widergespiegelt werden soll.
2. Anpassen des Aktualisierungsdialogfelds
Sie können die Darstellung des Standardaktualisierungsdialogfelds anpassen, indem Sie die DistributeListener
Schnittstelle implementieren. Sie müssen den Listener vor dem Aufrufen von AppCenter.start
registrieren, wie im folgenden Beispiel gezeigt:
Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)
Hier ist ein Beispiel für die Listenerimplementierung, die das SDK-Dialogfeld durch ein benutzerdefiniertes ersetzt:
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()
}
}
Wie im Beispiel gezeigt, müssen Sie entweder Distribute.notifyUpdateAction(UpdateAction.UPDATE);
oder Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
aufrufen, wenn Ihr Listener true
zurückgibt.
Wenn Sie notifyUpdateAction
nicht aufrufen, wird das Callback bei jeder Aktivitätsänderung wiederholt.
Der Listener kann erneut mit derselben Version aufgerufen werden, wenn sich die Aktivität ändert, bevor die Benutzeraktion an das SDK benachrichtigt wird.
Dieses Verhalten ist erforderlich, um die folgenden Szenarien abzudecken:
- Ihre Anwendung wird in den Hintergrund verschoben (wie durch Drücken von Home) und dann in einer anderen Aktivität wieder aufgenommen.
- Ihre Aktivität wird von einem anderen abgedeckt, ohne die Anwendung zu verlassen (z. B. durch Klicken auf einige Benachrichtigungen).
- Andere ähnliche Szenarien.
In diesem Fall kann die Aktivität, die das Dialogfeld hostet, ohne Benutzerinteraktion ersetzt werden. Daher ruft das SDK den Listener erneut auf, damit Sie das benutzerdefinierte Dialogfeld wiederherstellen können.
In Fällen, in denen das SDK nach Updates sucht und keine Updates findet, die neuer sind als die aktuell verwendete, wird ein onNoReleaseAvailable
-Rückruf über die DistributeListener
-Schnittstelle aufgerufen. Auf diese Weise können Sie benutzerdefinierten Code in solchen Szenarien ausführen. Das obige Beispiel zeigt, wie eine Toastmeldung angezeigt wird, wenn keine Updates gefunden werden.
Aktivieren oder Deaktivieren von App Center Distribute während der Ausführung
Sie können App Center Distribution während der Laufzeit aktivieren und deaktivieren. Wenn Sie es deaktivieren, stellt das SDK keine In-App-Updatefunktionen bereit, Sie können den Verteilungsdienst aber weiterhin im App Center-Portal verwenden.
Distribute.setEnabled(false);
Distribute.setEnabled(false)
Um App Center Distribute erneut zu aktivieren, verwenden Sie dieselbe API, übergeben true
sie aber als Parameter.
Distribute.setEnabled(true);
Distribute.setEnabled(true)
Der Zustand wird im Speicher des Geräts über Anwendungsstarts hinweg beibehalten.
Diese API ist asynchron, Sie können mehr dazu in unserem App Center-Leitfaden für asynchrone APIs lesen.
Hinweis
Diese Methode darf nur verwendet werden, nachdem Distribute
gestartet wurde.
Überprüfen, ob "App Center Verteilen" aktiviert ist
Sie können auch überprüfen, ob App Center Verteilen aktiviert ist oder nicht:
Distribute.isEnabled();
Distribute.isEnabled()
Diese API ist asynchron, Sie können mehr dazu in unserem App Center-Leitfaden für asynchrone APIs lesen.
Hinweis
Diese Methode darf nur verwendet werden, nachdem Distribute
sie gestartet wurde, sie wird immer vor dem Start zurückgegeben false
.
Aktivieren von In-App-Updates für Debugbuilds
Standardmäßig aktiviert App Center In-App-Updates nur für Releasebuilds.
Um In-App-Updates in Debugbuilds zu aktivieren, rufen Sie die folgende Methode vor AppCenter.start
:
Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)
Hinweis
Diese Methode wirkt sich nur auf Debugbuilds aus und hat keine Auswirkungen auf Releasebuilds.
Debugbuild bedeutet, dass das Flag festgelegt true
ist (das in der android:debuggable
Regel automatisch durch gradle vordefinierte Debugbuildvarianten festgelegt wird). Andernfalls ist dies ein Releasebuild.
Wie funktionieren In-App-Updates?
Hinweis
Damit In-App-Updates funktionieren, sollte ein App-Build über den Link heruntergeladen werden. Sie funktioniert nicht, wenn sie über eine IDE oder manuell installiert wurde.
Das Feature für In-App-Updates funktioniert wie folgt:
Dieses Feature funktioniert nur mit RELEASE-Builds (standardmäßig), die über den App Center Distribute-Dienst verteilt werden.
Nachdem Sie das SDK integriert haben, erstellen Sie die Version Ihrer App, und laden Sie sie in das App Center hoch, werden Benutzer in dieser Verteilergruppe per E-Mail über die neue Version benachrichtigt.
Wenn jeder Benutzer den Link in seiner E-Mail öffnet, wird die Anwendung auf ihrem Gerät installiert. Es ist wichtig, dass sie den E-Mail-Link zum Installieren verwenden . Wir unterstützen das Querladen nicht. Wenn eine Anwendung über den Link heruntergeladen wird, speichert das SDK wichtige Informationen aus Cookies, um zu einem späteren Zeitpunkt nach Updates zu suchen, andernfalls verfügt das SDK nicht über diese wichtigen Informationen.
Wenn die Anwendung den Titel auf "Privat" festlegt, wird ein Browser geöffnet, um den Benutzer zu authentifizieren und um In-App-Aktualisierungen zu ermöglichen. Der Browser wird nicht erneut geöffnet, solange die Authentifizierungsinformationen gültig bleiben, selbst wenn man wieder zum öffentlichen Track wechselt und später erneut privat geht. Wenn die Browserauthentifizierung erfolgreich ist, wird der Benutzer automatisch zurück zur Anwendung umgeleitet. Wenn die Spur öffentlich ist (dies ist die Standardeinstellung), erfolgt der nächste Schritt direkt.
Eine neue Version der App zeigt das Dialogfeld "In-App-Aktualisierung" an, in dem Benutzer aufgefordert werden, Ihre Anwendung zu aktualisieren, falls dies der Vorgang ist:
- ein höherer Wert von
versionCode
oder - ein gleicher Wert von
versionCode
, aber ein anderer Wert vonversionName
.
- ein höherer Wert von
Tipp
Wenn Sie das gleiche APK ein zweites Mal hochladen, wird das Dialogfeld NICHT angezeigt, da die Versionen identisch sind.
Wie teste ich In-App-Updates?
Sie müssen Releasebuilds (die das Verteilungsmodul des App Center SDK verwenden) in das App Center-Portal hochladen, um In-App-Updates zu testen und die Versionsnummern jedes Mal zu erhöhen.
- Erstellen Sie Ihre App im App Center-Portal, sofern noch nicht geschehen.
- Erstellen Sie eine neue Verteilergruppe, und nennen Sie sie, damit Sie erkennen können, dass sie zum Testen des In-App-Updatefeatures vorgesehen ist.
- Fügen Sie sich selbst hinzu (oder alle Personen, die Sie zum Testen des In-App-Updates hinzufügen möchten). Verwenden Sie hierfür eine neue oder weggeworfene E-Mail-Adresse, die für diese App im App Center nicht verwendet wurde. Dadurch wird sichergestellt, dass Ihre Erfahrung den echten Testern nahe kommt.
- Erstellen Sie einen neuen Build Ihrer App, der App Center Verteilen enthält, und enthält die Setuplogik wie oben beschrieben. Wenn die Gruppe privat ist, vergessen Sie nicht, den privaten In-App-Update-Pfad festzulegen, bevor Sie mit der Verwendung der setUpdateTrack-API beginnen.
- Klicken Sie im Portal auf die Schaltfläche " Neue Version verteilen ", und laden Sie Ihren Build der App hoch.
- Nachdem der Upload abgeschlossen ist, klicken Sie auf "Weiter ", und wählen Sie die Verteilergruppe aus, die Sie als Ziel dieser App-Verteilung erstellt haben.
- Überprüfen Sie die Verteilung, und verteilen Sie den Build an Ihre In-App-Testgruppe.
- Personen in dieser Gruppe erhalten eine Einladung, Tester der App zu sein. Sobald sie die Einladung angenommen haben, können sie die App über das App Center-Portal von ihrem mobilen Gerät herunterladen. Nachdem sie In-App-Updates installiert haben, können Sie In-App-Updates testen.
- Erhöhen Sie die
versionCode
Ihrer App. - Erstellen Sie die Releaseversion Ihrer App, und laden Sie einen neuen Build Ihrer App wie im vorherigen Schritt hoch, und verteilen Sie dies an die zuvor erstellte Verteilergruppe . Mitglieder der Verteilergruppe werden beim nächsten Start der App zur Eingabe einer neuen Version aufgefordert.
Tipp
Sehen Sie sich die Informationen zur Nutzung von App Center Distribute an, um ausführlichere Informationen zu Verteilergruppen usw. zu erhalten. Obwohl es möglich ist, App Center Distribute zu verwenden, um eine neue Version Ihrer App zu verteilen, ohne Code hinzuzufügen, führt das Hinzufügen von App Center Distribute zum Code Ihrer App zu einer nahtloseren Oberfläche für Ihre Tester und Benutzer, wenn sie die In-App-Updateerfahrung erhalten.