Unterstützung von In-App-Updates (Unity)

In diesem Leitfaden wird beschrieben, wie Sie In-App- Updates in Ihrer App mithilfe von Unity aktualisieren. Es gibt separate Leitfäden für Fälle, in denen die Kotlin-Programmierung verwendet wird oder die Java-Programmierung, Sprache und in Fällen, in denen Ihre bei der Implementierung nativen Code (C/C++).

Entwicklungsumgebung einrichten

Laden Sie die neueste Version des Unity-Plug-ins für In-App-Updates von Google Play aus den Google-Paketen für Unity:

Unity SDK – Übersicht

Die Play In-App Update API ist Teil des Play Core SDK-Familie. Die Einheit Das Plug-in bietet eine AppUpdateManager zur Kommunikation zwischen deiner App und der Play API. Du musst Instanziieren Sie diesen Kurs, bevor Sie damit In-App-Updates verwalten können:

AppUpdateManager appUpdateManager = new AppUpdateManager();

Verfügbarkeit von Updates prüfen

Bevor Sie ein Update anfordern, prüfen Sie, ob ein Update für Ihr Mit AppUpdateManager in einem coroutine angeben:

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 den Verfügbarkeitsstatus des Updates enthält. Wenn bereits ein In-App-Update ausgeführt wird, meldet die Instanz auch den Status des laufenden Updates.

Aktualität von Updates prüfen

Neben der Prüfung, ob ein Update verfügbar ist, Prüfen, wie viel Zeit seit der letzten Benachrichtigung des Nutzers über ein Update vergangen ist über den Play Store. So können Sie besser entscheiden, ob Sie ein flexibles Update oder ein sofortiges Update. Warten Sie z. B. einige Tage bevor der Nutzer mit einem flexiblen Update benachrichtigt wird, und einige Tage später bevor eine sofortige Aktualisierung erforderlich ist.

Verwenden Sie ClientVersionStalenessDays um zu sehen, wie viele Tage seit dem Update über Google Play Geschäft:

var stalenessDays = appUpdateInfoOperation.ClientVersionStalenessDays;

Updatepriorität prüfen

Mit der Google Play Developer API können Sie die Priorität jedes Updates festlegen. So kann Ihre App entscheiden, wie dringend ein Update dem Nutzer empfohlen wird. Betrachten Sie beispielsweise die folgende Strategie zum Festlegen der Aktualisierungspriorität:

  • Kleinere Verbesserungen der Benutzeroberfläche: Aktualisierung mit niedriger Priorität. weder eine flexible noch ein sofortiges Update.
  • Leistungsverbesserungen: Update mit mittlerer Priorität flexibles aktualisieren.
  • Kritisches Sicherheitsupdate: Update mit hoher Priorität Sofortige Anforderung aktualisieren.

Zur Bestimmung der Priorität verwendet Google Play einen ganzzahligen Wert zwischen 0 und 5 mit 0 Standardeinstellung und 5 die höchste Priorität. Zum Festlegen der Priorität für eine aktualisieren Sie das Feld inAppUpdatePriority unter Edits.tracks.releases in der Google Play Developer API Alle neu hinzugefügten Versionen im Release dieselbe Priorität wie die Veröffentlichung haben. Die Priorität kann nur festgelegt werden, wenn wenn ein neuer Release eingeführt wird. Diese kann später nicht mehr geändert werden.

Legen Sie die Priorität mithilfe der Google Play Developer API fest, wie in der Google Play Developer API Entwickler-API Dokumentation. Die Priorität für In-App-Updates sollte in der Edit.tracks im Feld Edit.tracks: update . Das folgende Beispiel zeigt die Veröffentlichung einer App mit dem Versionscode 88. und inAppUpdatePriority 5:

{
  "releases": [{
      "versionCodes": ["88"],
      "inAppUpdatePriority": 5,
      "status": "completed"
  }]
}

Im Code Ihrer App können Sie die Prioritätsstufe für ein bestimmtes Update mit UpdatePriority:

var priority = appUpdateInfoOperation.UpdatePriority;

Update starten

Nachdem Sie sichergestellt haben, dass ein Update verfügbar ist, können Sie es mit AppUpdateManager.StartUpdate() Bevor Sie eine Aktualisierung anfordern, sollten Sie AppUpdateInfo-Objekt. Sie müssen auch eine AppUpdateOptions -Objekt, um den Aktualisierungsablauf zu konfigurieren.

Im folgenden Beispiel wird ein AppUpdateOptions-Objekt für eine sofortige Ablauf aktualisieren:

// 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 eine flexible Ablauf aktualisieren:

// Creates an AppUpdateOptions defining a flexible in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.FlexibleAppUpdateOptions();

Das AppUpdateOptions-Objekt enthält auch ein AllowAssetPackDeletion-Feld der definiert, ob das Update das Asset löschen darf Paketen bei begrenztem Speicherplatz auf dem Gerät. Dieses ist standardmäßig auf false gesetzt. Sie können den Wert Optionales Argument allowAssetPackDeletion für ImmediateAppUpdateOptions() oder FlexibleAppUpdateOptions(), um sie 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 eine flexible Update oder ein sofortiges Update.

Flexible Aktualisierung verarbeiten

Wenn Sie ein aktuelles AppUpdateInfo-Objekt und ein korrekt konfiguriertes AppUpdateOptions-Objekt enthält, können Sie AppUpdateManager.StartUpdate() aufrufen, um um einen Aktualisierungsablauf asynchron 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 Updateablauf musst du die Installation des App-Updates auslösen nachdem der Download erfolgreich abgeschlossen wurde. Rufen Sie dazu AppUpdateManager.CompleteUpdate(), Dies wird 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).
}

Sofortige Aktualisierung verarbeiten

Wenn Sie ein aktuelles AppUpdateInfo-Objekt und ein korrekt konfiguriertes AppUpdateOptions-Objekt enthält, können Sie AppUpdateManager.StartUpdate() aufrufen, um um einen Aktualisierungsablauf asynchron 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).
}

Wenn ein Update sofort durchgeführt werden soll, wird in Google Play ein Bestätigungsdialogfeld für den Nutzer angezeigt. Wenn der Nutzer die Anfrage annimmt, lädt Google Play automatisch installiert das Update und startet die App dann mit der aktualisierten Version neu, wenn die Installation erfolgreich war.

Fehlerbehandlung

In diesem Abschnitt werden Lösungen für häufige Fehler beschrieben.

  • Wenn StartUpdate() eine ArgumentNullException ausgibt, bedeutet dies, dass AppUpdateInfo ist null. Achten Sie darauf, dass das AppUpdateInfo-Objekt, das von GetAppUpdateInfo() ist vor dem Start des Aktualisierungsvorgangs nicht null.
  • Wenn PlayAsyncOperation den Fehlercode ErrorUpdateUnavailable zurückgibt, ob eine aktualisierte App-Version mit derselben App verfügbar ist ID und Signaturschlüssel.
  • Wenn PlayAsyncOperation den Fehlercode ErrorUpdateNotAllowed zurückgibt, bedeutet, dass das AppUpdateOptions-Objekt einen Aktualisierungstyp angibt, der nicht für das verfügbare Update zugelassen ist. Prüfen Sie, ob das AppUpdateInfo-Objekt gibt an, dass der ausgewählte Aktualisierungstyp vor dem Start des Updates zulässig ist Ablauf.

Nächste Schritte

Teste die In-App-Updates, um dies zu prüfen ob Ihre Integration ordnungsgemäß funktioniert.