App Center Verteilen – Unity-In-App-Updates
Wichtig
Visual Studio App Center wird am 31. März 2025 eingestellt. Sie können Visual Studio App Center zwar weiterhin verwenden, bis es vollständig eingestellt ist, es gibt jedoch mehrere empfohlene Alternativen, zu denen Sie eine Migration in Betracht ziehen können.
App Center-Verteilung ermöglicht es Ihren Benutzern/Testern, neue Versionen einer App zu installieren, sobald Sie sie über App Center verteilen. Nach der Aktivierung stellt das SDK benutzern ein Updatedialogfeld bereit, um die Installation des neuesten Updates herunterzuladen oder zu verschieben. Sobald sie sich für ein Update entschieden haben, beginnt das SDK mit dem Aktualisieren Ihrer Anwendung.
Wichtig
Das Verteilungs-SDK für Unity unterstützt UWP nicht. Die Anweisungen auf dieser Seite beziehen sich nur auf Android und iOS.
Warnung
Google Play betrachtet den In-App-Updatecode als schädliches Verhalten, auch wenn er zur Laufzeit nicht verwendet wird. Entfernen Sie diesen Code wie in diesem Abschnitt beschrieben, bevor Sie Ihre App an Google Play übermitteln. Wenn der In-App-Updatecode nicht entfernt wird, kann dies zu einer Nichtkonformität und Entfernung der App aus Google Play führen.
Hinweis
Wenn Sie automatisierte Benutzeroberflächentests ausführen, blockieren aktivierte In-App-Updates Ihre automatisierten Benutzeroberflächentests, da sie versuchen, sich beim App Center-Back-End zu authentifizieren. Es wird empfohlen, In-App-Updates für Ihre Benutzeroberflächentests zu deaktivieren.
Hinzufügen von In-App-Updates zu Ihrer App
Hinzufügen des App Center-Moduls "Verteilen"
Das App Center SDK ist mit einem modularen Ansatz konzipiert. Entwickler müssen nur die Module der Dienste integrieren, an denen sie interessiert sind.
Befolgen Sie die Dokumentation zu den ersten Schritten von Unity , wenn Sie das SDK noch nicht in Ihrer Anwendung eingerichtet und gestartet haben. Stellen Sie sicher, dass Sie das App Center-Verteilungspaket importieren. Der Name sollte das Format AppCenterDistribute-v{version}.unitypackage
aufweisen.
Hinweis
Android 10 oder höher verfügt über Einschränkungen für die Startaktivität aus dem Hintergrund. Weitere Informationen finden Sie im Artikel zu Einschränkungen beim Starten von Aktivitäten im Hintergrund.
Hinweis
Apps, die unter Android 10 (Go Edition) ausgeführt werden, können die berechtigung SYSTEM_ALERT_WINDOW nicht erhalten. Weitere Informationen finden Sie im Artikel SYSTEM_ALERT_WINDOW auf Go-Geräten.
Hinweis
Ab Android 11 ACTION_MANAGE_OVERLAY_PERMISSION
bringen Absichten den Benutzer immer zum Bildschirm "Einstellungen" auf oberster Ebene, in dem der Benutzer die SYSTEM_ALERT_WINDOW
Berechtigungen für Apps erteilen oder widerrufen kann. Weitere Informationen finden Sie im Artikel zu Berechtigungsupdates in Android 11.
Entfernen von In-App-Updates für Google Play-Builds
Google Play betrachtet den In-App-Updatecode als schädliches Verhalten, auch wenn er zur Laufzeit nicht verwendet wird. Entfernen Sie diesen Code, bevor Sie Ihre App an Google Play übermitteln. Wenn der In-App-Updatecode nicht entfernt wird, kann dies zu einer Nichtkonformität und Entfernung der App aus Google Play führen. Um nativen Code für In-App-Updates zu entfernen, deaktivieren Sie das Kontrollkästchen Verteilen verwenden im Abschnitt Verteilen des Spielobjekts mit angefügtem AppCenterBehavior .
Verwenden einer privaten Verteilergruppe
Standardmäßig verwendet Distribute eine öffentliche Verteilergruppe. Wenn Sie eine private Verteilergruppe verwenden möchten, müssen Sie zu Privat wechseln UpdateTrack
.
Wählen Sie dazu im Spielobjekt mit angefügtem AppCenterBehavior im Abschnitt Verteilen in der Dropdownliste Nachverfolgung aktualisieren die Option Privat aus.
Wenn Sie den privaten Track verwenden, wird ein Browserfenster geöffnet, um den Benutzer zu authentifizieren. Alle nachfolgenden Updateüberprüfungen erhalten die neueste Version auf der privaten Spur.
Wenn sich ein Benutzer im privaten Bereich befindet, bedeutet dies, dass er nach der erfolgreichen Authentifizierung das neueste Release von allen privaten Verteilergruppen erhält, in denen er Mitglied ist. Wenn sich ein Benutzer auf der öffentlichen Spur befindet, bedeutet dies, dass er das neueste Release von einer beliebigen öffentlichen Verteilergruppe erhält.
Deaktivieren der automatischen Überprüfung auf Updates
Standardmäßig sucht das SDK automatisch nach neuen Releases:
- Wenn die Anwendung gestartet wird.
- Wenn die Anwendung in den Hintergrund wechselt, dann wieder im Vordergrund.
- Beim Aktivieren des Moduls Verteilen, wenn es zuvor deaktiviert ist.
Wenn Sie manuell nach neuen Versionen suchen möchten, können Sie die automatische Überprüfung auf Updates deaktivieren.
Deaktivieren Sie dazu das Kontrollkästchen Automatische Überprüfung auf Update im Abschnitt Verteilen des Spielobjekts mit angefügtem AppCenterBehavior .
Anschließend können Sie die CheckForUpdate
API verwenden, die im folgenden Abschnitt beschrieben wird.
Manuelles Überprüfen auf Update
Distribute.CheckForUpdate();
Dadurch wird eine Anforderung an App Center gesendet und ein Updatedialogfeld angezeigt, falls ein neues Release verfügbar ist.
Hinweis
Eine manuelle Überprüfung auf Updateaufruf funktioniert auch dann, wenn automatische Updates aktiviert sind. Eine manuelle Überprüfung auf Update wird ignoriert, wenn bereits eine andere Überprüfung durchgeführt wird. Die manuelle Überprüfung auf Updates 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-Updatedialogfelds
1. Anpassen oder Lokalisieren von Text
Sie können Ihre eigenen Ressourcenzeichenfolgen angeben, wenn Sie den im Aktualisierungsdialogfeld angezeigten Text lokalisieren möchten. Sehen Sie sich die Zeichenfolgendateien für iOS in dieser iOS-Ressourcendatei und für Android in dieser Android-Ressourcendatei an. Verwenden Sie denselben Zeichenfolgennamen/Schlüssel, und geben Sie den lokalisierten Wert an, der im Dialogfeld in Ihren eigenen App-Ressourcendateien angezeigt werden soll.
2. Anpassen des Aktualisierungsdialogfelds
Sie können die Darstellung des Standardaktualisierungsdialogfelds anpassen, indem Sie den ReleaseAvailable
Rückruf implementieren.
Warnung
Sie müssen den Rückruf in der -Methode eines MonoBehaviour
in der Awake
ersten Szene registrieren, die Ihre Anwendung lädt, um zu vermeiden, dass Aufrufe von Releaserückrufen fehlen.
// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
Hier sehen Sie eine Rückrufimplementierung, die das SDK-Dialogfeld durch benutzerdefinierte Logik ersetzt:
bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
// Look at releaseDetails public properties to get version information, release notes text or release notes URL
string versionName = releaseDetails.ShortVersion;
string versionCodeOrBuildNumber = releaseDetails.Version;
string releaseNotes = releaseDetails.ReleaseNotes;
Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;
// (Do something with the values if you want)
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
// Force user to update (you should probably show some custom UI here)
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Allow user to update or postpone (you should probably show some custom UI here)
// "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
// This blocks the thread while awaiting the user's response! This example shouldn't be used literally
UpdateAction updateAction = GetUserUpdateAction();
Distribute.NotifyUpdateAction(updateAction);
}
// Return true if you're using your own UI to get user response, false otherwise
return true;
}
Implementierungshinweise für Android:
Wie im Beispiel gezeigt, müssen Sie entweder Distribute.NotifyUpdateAction(UpdateAction.UPDATE);
oder Distribute.NotifyUpdateAction(UpdateAction.POSTPONE);
aufrufen, wenn der Rückruf zurückgibt true
.
Wenn Sie nicht aufrufen NotifyUpdateAction
, wird der Rückruf bei jeder Aktivitätsänderung wiederholt.
Der Rückruf kann mit derselben Version erneut 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 an den Hintergrund gesendet (z. B. durch Drücken von HOME) und dann in einer anderen Aktivität fortgesetzt.
- Ihre Aktivität wird von einer anderen Aktivität abgedeckt, ohne die Anwendung zu verlassen (z. B. auf einige Benachrichtigungen klicken).
- Ähnliche Szenarien wie oben.
In diesem Fall kann die Aktivität, die den Dialog hosten, ohne Benutzerinteraktion ersetzt werden. Daher ruft das SDK den Listener erneut auf, damit Sie das benutzerdefinierte Dialogfeld wiederherstellen können.
3. Ausführen von Code, wenn keine Updates gefunden werden
In Fällen, in dem das SDK nach Updates sucht und keine updates findet, die neuer als das derzeit verwendete verfügbar sind, wird ein NoReleaseAvailable
Rückruf aufgerufen. Dadurch können Sie in solchen Szenarien benutzerdefinierten Code ausführen.
Sie müssen den Rückruf registrieren, bevor Sie aufrufen AppCenter.Start
, wie im folgenden Beispiel gezeigt:
// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
AppCenterLog.Info(LogTag, "No release available callback invoked.");
}
## Enable or disable App Center Distribute at runtime
You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.
To disable the Distribute service, use the following code:
```csharp
Distribute.SetEnabledAsync(false);
Um App Center Distribute erneut zu aktivieren, verwenden Sie dieselbe API, übergeben true
Sie jedoch als Parameter.
Distribute.SetEnabledAsync(true);
Diese API ist asynchron. Weitere Informationen finden Sie in unserem App Center-Leitfaden für asynchrone APIs .
Sie müssen nicht auf diesen Aufruf warten, um andere API-Aufrufe (z IsEnabledAsync
. B. ) konsistent auszuführen.
Der Zustand wird über Anwendungsstarts hinweg im Speicher des Geräts beibehalten.
Überprüfen, ob App Center-Verteilung aktiviert ist
Sie können auch überprüfen, ob App Center-Verteilung aktiviert ist:
Distribute.IsEnabledAsync();
Diese API ist asynchron. Weitere Informationen finden Sie in unserem App Center-Leitfaden für asynchrone APIs .
Aktivieren von In-App-Updates für Debugbuilds
Standardmäßig sind In-App-Updates nur für Releasebuilds aktiviert.
Um In-App-Updates für Debugbuilds unter Android und iOS zu aktivieren, aktivieren Sie das Kontrollkästchen In Debug verteilen aktivieren im Abschnitt Verteilen für das Spielobjekt mit angefügtem AppCenterBehavior .
In Unity ist ein debugfähiger Build ein Build, bei dem die Option Entwicklungsbuild aktiviert ist.
Führen Sie sauber direkt vor dem Schließen der App für das Update aus.
Hinweis
Dieser Rückruf funktioniert nur unter iOS.
Registrieren Sie den Rückruf, wie im folgenden Beispiel gezeigt:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
Damit wird aufgerufen, OnWillExitApp()
wenn Distributed geschlossen wird.
Funktionsweise von In-App-Updates
Hinweis
Damit In-App-Updates funktionieren, sollte ein App-Build über den Link heruntergeladen werden. Es funktioniert nicht, wenn es über eine IDE oder manuell installiert wird.
Das Feature für In-App-Updates funktioniert wie folgt:
- Dieses Feature funktioniert (standardmäßig) nur mit RELEASE-Builds , die mithilfe des App Center-Verteilungsdiensts verteilt werden. Dies funktioniert nicht, wenn das Feature für den geführten iOS-Zugriff aktiviert ist.
- Nachdem Sie das SDK integriert haben, erstellen Sie eine Releaseversion Ihrer App, und laden Sie sie in App Center hoch. Benutzer in der Verteilergruppe werden per E-Mail über das neue Release benachrichtigt.
- Wenn jeder Benutzer den Link in seiner E-Mail öffnet, wird die Anwendung auf dem Gerät installiert. Es ist wichtig, dass sie den E-Mail-Link verwenden, um zu installieren. Querladen wird nicht unterstützt. Wenn eine Anwendung über den Link heruntergeladen wird, speichert das SDK wichtige Informationen aus Cookies, um später nach Updates zu suchen. Andernfalls verfügt das SDK nicht über diese Schlüsselinformationen.
- Wenn die Anwendung die Spur auf privat festlegt, wird ein Browser geöffnet, um den Benutzer zu authentifizieren und In-App-Updates zu aktivieren. Der Browser wird nicht erneut geöffnet, solange die Authentifizierungsinformationen gültig bleiben, auch wenn sie später wieder zur öffentlichen Spur und später wieder zurück zu privat wechseln. Wenn die Browserauthentifizierung erfolgreich ist, wird der Benutzer automatisch zurück zur Anwendung umgeleitet. Wenn der Titel öffentlich ist (dies ist die Standardeinstellung), erfolgt der nächste Schritt direkt.
- Eine neue Version der App zeigt das In-App-Updatedialogfeld an, in dem Benutzer aufgefordert werden, Ihre Anwendung zu aktualisieren, wenn dies der Fall ist:
- iOS:
- einen höheren Wert von
CFBundleShortVersionString
oder - ein gleicher Wert von,
CFBundleShortVersionString
aber ein höherer Wert vonCFBundleVersion
. - Die Versionen sind identisch, aber der eindeutige Buildbezeichner unterscheidet sich.
- einen höheren Wert von
- Android:
- einen höheren Wert von
versionCode
oder - ein gleicher Wert von,
versionCode
aber ein anderer Wert vonversionName
.
- einen höheren Wert von
- iOS:
Tipp
Wenn Sie dieselbe .apk/.ipa ein zweites Mal hochladen, wird das Dialogfeld nicht angezeigt, da die Binärdateien identisch sind. Wenn Sie unter iOS einen neuen Build mit den gleichen Versionseigenschaften hochladen, wird das Updatedialogfeld angezeigt. Der Grund dafür ist, dass es sich um eine andere Binärdatei handelt. Unter Android gelten Binärdateien als gleich, wenn beide Versionseigenschaften identisch sind.
Gewusst wie In-App-Updates testen?
Sie müssen Releasebuilds (die das Modul Verteilen des App Center SDK verwenden) in das App Center-Portal hochladen, um In-App-Updates zu testen, wobei die Versionszahlen jedes Mal erhöht werden.
- Erstellen Sie Ihre App im App Center-Portal, sofern noch nicht geschehen.
- Erstellen Sie eine neue Verteilergruppe, und geben Sie ihr einen Namen.
- Fügen Sie sich selbst hinzu (oder alle Personen, die Sie in Ihren Test des In-App-Updatefeatures einbeziehen möchten). Verwenden Sie für diesen Schritt eine neue oder Wegwerf-E-Mail-Adresse, die noch nicht mit dieser App verwendet wird. Dadurch wird sichergestellt, dass Ihre Erfahrung nahe an der Erfahrung Ihrer echten Tester liegt.
- Erstellen Sie einen neuen Build Ihrer App, der App Center Distributed enthält und die Setuplogik enthält, wie unten beschrieben. Wenn die Gruppe privat ist, vergessen Sie nicht, den privaten In-App-Updatetrack festzulegen, bevor Sie mit der Verwendung der
UpdateTrack
-Eigenschaft beginnen. - Klicken Sie im Portal auf die Schaltfläche Neues Release verteilen , und laden Sie Ihren Build der App hoch.
- Klicken Sie nach Abschluss des Uploads auf Weiter , und wählen Sie die Verteilergruppe aus, die Sie zuvor 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. Nachdem sie die Einladung angenommen haben, können sie die App aus dem App Center-Portal von ihrem mobilen Gerät herunterladen. Sobald In-App-Updates installiert sind, können Sie In-App-Updates testen.
- Erhöhen Sie die Version Ihrer App (
CFBundleShortVersionString
oderCFBundleVersion
für iOS,versionCode
für Android). - Erstellen Sie die Releaseversion Ihrer App, und laden Sie wie im vorherigen Schritt einen neuen Build hoch. Verteilen Sie 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 Verwendung von App Center Distribute an, um ausführlichere Informationen zu Verteilergruppen usw. zu erhalten. Es ist zwar möglich, App Center Distributed zu verwenden, um eine neue Version Ihrer App zu verteilen, ohne Code hinzuzufügen, aber das Hinzufügen von App Center Distribute zum Code Ihrer App führt zu einer nahtloseren Erfahrung für Ihre Tester und Benutzer, wenn sie die In-App-Updateerfahrung erhalten.