In diesem Leitfaden wird beschrieben, wie Sie In-App-Updates in Ihrer App mit Unity unterstützen. Es gibt separate Leitfäden für Fälle, in denen Ihre Implementierung die Programmiersprache Kotlin oder die Programmiersprache Java verwendet, und Fälle, in denen Ihre Implementierung nativen Code (C/C++) verwendet.
Entwicklungsumgebung einrichten
Laden Sie die neueste Version des Play In-App Update Unity-Plug-ins aus den Google-Paketen für Unity herunter.
Unity SDK – Übersicht
Die Play In-App Update API ist Teil der Play Core SDK-Familie. Das Unity-Plug-in bietet die Klasse AppUpdateManager
zur Verwaltung der Kommunikation zwischen Ihrer App und der Play API. Du musst diese Klasse instanziieren, bevor du sie zum Verwalten von In-App-Updates verwenden kannst:
AppUpdateManager appUpdateManager = new AppUpdateManager();
Verfügbarkeit von Updates prüfen
Bevor Sie ein Update anfordern, prüfen Sie, ob für die Anwendung ein Update verfügbar ist. Verwenden Sie AppUpdateManager
, um in einer Koroutine nach einem Update zu suchen:
IEnumerator CheckForUpdate()
{
PlayAsyncOperation<AppUpdateInfo, AppUpdateErrorCode> appUpdateInfoOperation =
appUpdateManager.GetAppUpdateInfo();
// Wait until the asynchronous operation completes.
yield return appUpdateInfoOperation;
if (appUpdateInfoOperation.IsSuccessful)
{
var appUpdateInfoResult = appUpdateInfoOperation.GetResult();
// Check AppUpdateInfo's UpdateAvailability, UpdatePriority,
// IsUpdateTypeAllowed(), etc. and decide whether to ask the user
// to start an in-app update.
}
else
{
// Log appUpdateInfoOperation.Error.
}
}
Die zurückgegebene AppUpdateInfo
-Instanz enthält den Verfügbarkeitsstatus des Updates. Wenn bereits ein In-App-Update läuft, meldet die Instanz auch den Status des laufenden Updates.
Update-Veralterung prüfen
Sie können nicht nur prüfen, ob ein Update verfügbar ist, sondern auch, wie viel Zeit vergangen ist, seit der Nutzer das letzte Mal über den Play Store über ein Update benachrichtigt wurde. Dies kann Ihnen bei der Entscheidung helfen, ob Sie ein flexibles oder ein sofortiges Update initiieren sollten. Beispielsweise können Sie einige Tage warten, bevor Sie den Nutzer mit einem flexiblen Update benachrichtigen, und einige Tage danach, bevor Sie eine sofortige Aktualisierung anfordern.
Mit ClientVersionStalenessDays
kannst du prüfen, wie viele Tage seit der Einführung des Updates im Play Store vergangen sind:
var stalenessDays = appUpdateInfoOperation.ClientVersionStalenessDays;
Updatepriorität prüfen
Mit der Google Play Developer API können Sie die Priorität jedes Updates festlegen. Auf diese Weise kann deine App entscheiden, wie stark sie dem Nutzer ein Update empfehlen sollte. Betrachten Sie beispielsweise die folgende Strategie zum Festlegen der Aktualisierungspriorität:
- Kleinere Verbesserungen an der Benutzeroberfläche: Update mit niedriger Priorität. Fordern Sie weder ein flexibles noch ein sofortiges Update an.
- Leistungsverbesserungen: Update mit mittlerer Priorität; fordern Sie ein flexibles Update an.
- Kritisches Sicherheitsupdate: Update mit hoher Priorität. Fordern Sie ein sofortiges Update an.
Zur Bestimmung der Priorität verwendet Google Play eine Ganzzahl zwischen 0 und 5, wobei 0 die Standardeinstellung und 5 die höchste Priorität ist. Du kannst die Priorität für ein Update in der Google Play Developer API im Feld inAppUpdatePriority
unter Edits.tracks.releases
festlegen. Alle neu hinzugefügten Versionen im Release haben dieselbe Priorität wie der Release. Die Priorität kann nur beim Roll-out eines neuen Release festgelegt und später nicht mehr geändert werden.
Legen Sie die Priorität mithilfe der Google Play Developer API fest, wie in der Dokumentation zur Play Developer API beschrieben.
Die Priorität für In-App-Updates sollte in der Ressource Edit.tracks
angegeben werden, die in der Methode Edit.tracks: update
übergeben wird. Im folgenden Beispiel wird die Veröffentlichung einer App mit den Versionscodes 88 und inAppUpdatePriority
5 veranschaulicht:
{ "releases": [{ "versionCodes": ["88"], "inAppUpdatePriority": 5, "status": "completed" }] }
Im Code Ihrer App können Sie die Prioritätsstufe für ein bestimmtes Update mit UpdatePriority
prüfen:
var priority = appUpdateInfoOperation.UpdatePriority;
Update starten
Wenn Sie sichergestellt haben, dass ein Update verfügbar ist, können Sie es mit AppUpdateManager.StartUpdate()
anfordern.
Bevor Sie eine Aktualisierung anfordern, prüfen Sie, ob das AppUpdateInfo
-Objekt auf dem neuesten Stand ist. Außerdem müssen Sie ein AppUpdateOptions
-Objekt erstellen, um den Aktualisierungsablauf zu konfigurieren.
Im folgenden Beispiel wird ein AppUpdateOptions
-Objekt für einen sofortigen Aktualisierungsablauf erstellt:
// Creates an AppUpdateOptions defining an immediate in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.ImmediateAppUpdateOptions();
Im folgenden Beispiel wird ein AppUpdateOptions
-Objekt für einen flexiblen Aktualisierungsablauf erstellt:
// Creates an AppUpdateOptions defining a flexible in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.FlexibleAppUpdateOptions();
Das AppUpdateOptions
-Objekt enthält außerdem ein AllowAssetPackDeletion
-Feld, das definiert, ob bei der Aktualisierung Asset-Packs bei begrenztem Gerätespeicher gelöscht werden dürfen. Dieses Feld ist standardmäßig auf false
gesetzt, Sie können jedoch das optionale Argument allowAssetPackDeletion
an ImmediateAppUpdateOptions()
oder FlexibleAppUpdateOptions()
übergeben, um es stattdessen auf true
festzulegen:
// Creates an AppUpdateOptions for an immediate flow that allows
// asset pack deletion.
var appUpdateOptions =
AppUpdateOptions.ImmediateAppUpdateOptions(allowAssetPackDeletion: true);
// Creates an AppUpdateOptions for a flexible flow that allows asset
// pack deletion.
var appUpdateOptions =
AppUpdateOptions.FlexibleAppUpdateOptions(allowAssetPackDeletion: true);
Die nächsten Schritte hängen davon ab, ob Sie ein flexibles Update oder ein sofortiges Update anfordern.
Flexible Updates verarbeiten
Wenn Sie ein aktuelles AppUpdateInfo
-Objekt und ein korrekt konfiguriertes AppUpdateOptions
-Objekt haben, können Sie AppUpdateManager.StartUpdate()
aufrufen, um asynchron einen Aktualisierungsvorgang anzufordern.
IEnumerator StartFlexibleUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
while (!startUpdateRequest.IsDone)
{
// For flexible flow,the user can continue to use the app while
// the update downloads in the background. You can implement a
// progress bar showing the download status during this time.
yield return null;
}
}
Für einen flexiblen Updatevorgang müssen Sie die Installation des App-Updates auslösen, nachdem der Download erfolgreich abgeschlossen wurde. Rufen Sie dazu AppUpdateManager.CompleteUpdate()
auf, wie im folgenden Beispiel gezeigt:
IEnumerator CompleteFlexibleUpdate()
{
var result = appUpdateManager.CompleteUpdate();
yield return result;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (e.g. by
// logging result.Error or by displaying a message to the user).
}
Ein sofortiges Update durchführen
Wenn Sie ein aktuelles AppUpdateInfo
-Objekt und ein korrekt konfiguriertes AppUpdateOptions
-Objekt haben, können Sie AppUpdateManager.StartUpdate()
aufrufen, um asynchron einen Aktualisierungsvorgang anzufordern.
IEnumerator StartImmediateUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
yield return startUpdateRequest;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (for
// example, by logging result.Error or by displaying a message to the user).
}
Damit ein Update sofort schnellstmöglich durchgeführt werden kann, wird in Google Play ein Dialogfeld zum Bestätigen des Updates angezeigt. Wenn der Nutzer die Anfrage akzeptiert, lädt Google Play das Update automatisch herunter und installiert es. Wenn die Installation erfolgreich war, wird die App mit der aktualisierten Version neu gestartet.
Fehlerbehandlung
In diesem Abschnitt werden Lösungen für häufige Fehler beschrieben.
- Wenn
StartUpdate()
einArgumentNullException
ausgibt, bedeutet dies, dassAppUpdateInfo
null ist. Achten Sie darauf, dass das vonGetAppUpdateInfo()
zurückgegebeneAppUpdateInfo
-Objekt nicht null ist, bevor Sie den Aktualisierungsvorgang starten. - Wenn
PlayAsyncOperation
den FehlercodeErrorUpdateUnavailable
zurückgibt, prüfen Sie, ob eine aktualisierte App-Version mit derselben Anwendungs-ID und demselben Signaturschlüssel verfügbar ist. - Wenn
PlayAsyncOperation
den FehlercodeErrorUpdateNotAllowed
zurückgibt, gibt das ObjektAppUpdateOptions
einen Updatetyp an, der für das verfügbare Update nicht zulässig ist. Prüfen Sie, ob das ObjektAppUpdateInfo
angibt, dass der ausgewählte Aktualisierungstyp zulässig ist, bevor Sie den Aktualisierungsvorgang starten.
Nächste Schritte
Teste die In-App-Updates deiner App, um zu prüfen, ob die Integration korrekt funktioniert.