Google Play Instant mit Unity verwenden

Das Google Play Instant-Plug-in für Unity konfiguriert Ihr Unity-Projekt so, dass eine Instant-App-Version Ihres Spiels erstellt wird. In dieser Anleitung wird beschrieben, wie Sie dieses Plug-in installieren und verwenden.

Plug-in herunterladen und importieren

Das Plug-in ist Teil der Google Play-Plug-ins für Unity. So importieren Sie das Plug-in:

  1. Laden Sie den neuesten Release über die Google Play-Plug-ins für Unity-Releases herunter.
  2. Importieren Sie die Datei .unitypackage, indem Sie die Menüoption Assets > Paket importieren > Benutzerdefiniertes Paket der Unity-IDE auswählen und alle Elemente importieren.

Funktionen des Unity-Editors

Importieren Sie das Plug-in, um in Unity ein Untermenü Google > Play Instant hinzuzufügen. Dieses Untermenü enthält die folgenden Optionen.

Build-Einstellungen

Öffnet ein Fenster, in dem zwischen den Entwicklungsmodi Installiert und Instant gewechselt werden kann. Beim Wechsel zu Instant werden folgende Änderungen vorgenommen:

  • Es wird ein Scripting-Symbol mit dem Namen PLAY_INSTANT erstellt, das für Skripts mit #if PLAY_INSTANT und #endif verwendet werden kann.
  • Verwaltet Aktualisierungen der AndroidManifest.xml für bestimmte erforderliche Änderungen wie android:targetSandboxVersion.

Player-Einstellungen

Das Dialogfeld Player Settings (Player-Einstellungen) (siehe Abbildung 1) enthält Vorschläge, mit denen Sie die Unterstützung für Google Play Instant optimieren, die Entwicklung für kompatible Grafik-APIs vornehmen und die APK-Größe reduzieren können.

Beispiele dafür sind die ausschließliche Verwendung von OpenGL ES 2.0 und das Deaktivieren des Multithread-Renderings.
Abbildung 1: Das Dialogfeld Player Settings (Player-Einstellungen)

Diese Player-Einstellungen sind in die Einstellungen Erforderlich und Empfohlen unterteilt. Wenn für eine Einstellung eine entsprechende Schaltfläche Aktualisieren vorhanden ist, klicken Sie darauf, um die Einstellung auf den bevorzugten Wert zu ändern.

Wenn du die APK-Größe weiter reduzieren möchtest, öffne den Unity Package Manager und entferne alle nicht verwendeten Pakete.

Schnellbereitstellung

Mit Quick Deploy lässt sich die Größe einer Unity-basierten Instant-App reduzieren, indem einige Assets in einem AssetBundle verpackt werden. Bei Verwendung von Quick Deploy werden die Unity-Spiele-Engine und ein Ladebildschirm in ein Instant-App-APK gepackt. Nach dem Start der Instant-App wird das AssetBundle von einem Server abgerufen.

Installations-Workflows unterstützen

Das Ziel vieler Instant-Apps besteht darin, Nutzern die Möglichkeit zu geben, die App vor der Installation der Vollversion auszuprobieren. Das Google Play Instant-Plug-in für Unity bietet APIs zum Anzeigen eines Play Store-Installationsdialogs und zur Übertragung des Status von Instant an installierte Apps.

Installationsaufforderung anzeigen

In einer Instant-App mit der Schaltfläche Installieren kann ein Play Store-Installationsdialogfeld aufgerufen werden. Dazu wird Folgendes über einen Klick-Handler auf Installationsschaltfläche aufgerufen:

Google.Play.Instant.InstallLauncher.ShowInstallPrompt();

Die Methode ShowInstallPrompt() hat eine Überlastung, die eine oder mehrere der folgenden Aufgaben ermöglicht:

  • Es wird ermittelt, ob der Nutzer die Installation abbricht. Überschreiben Sie onActivityResult() in der Hauptaktivität der Instant-App und suchen Sie in der angegebenen requestCode nach RESULT_CANCELED.
  • Übergeben eines Strings für die Installations-Verweis-URL über den Parameter referrer.
  • Übergeben des Status über die aktuelle Spielsitzung über PutPostInstallIntentStringExtra().

Diese werden im folgenden Beispiel veranschaulicht:

using Google.Play.Instant;
...
const int requestCode = 123;
var sessionInfo = /* Object serialized as a string representing player's current location, etc. */;
using (var activity = UnityPlayerHelper.GetCurrentActivity())
using (var postInstallIntent = InstallLauncher.CreatePostInstallIntent(activity))
{
    InstallLauncher.PutPostInstallIntentStringExtra(postInstallIntent, "sessionInfo", sessionInfo);
    InstallLauncher.ShowInstallPrompt(activity, requestCode, postInstallIntent, "test-referrer");
}

Wenn der Nutzer die Installation der App abschließt, wird sie im Play Store mit dem bereitgestellten postInstallIntent neu gestartet. Die installierte Anwendung kann einen im postInstallIntent festgelegten Wert so abrufen:

var sessionInfo = InstallLauncher.GetPostInstallIntentStringExtra("sessionInfo");

Hinweise:

  • Die in postInstallIntent enthaltenen Extras erreichen die installierte App möglicherweise nicht, wenn der Nutzer die App installiert, aber den Start nach der Installation abbricht. Das Übergeben von Intent-Extras eignet sich besser zum Beibehalten des aktiven Sitzungsstatus als zum Beibehalten des nichtflüchtigen Status. Bei letzterem wird auf die Cookie API verwiesen.
  • Jeder kann einen Intent mit zusätzlichen Feldern erstellen, um die installierte Anwendung zu starten. Wenn die Nutzlast also einen Wert bietet, konzipieren Sie die Nutzlast so, dass sie nur einmal verwendet werden kann, signieren Sie sie kryptografisch und verifizieren Sie die Signatur auf einem Server.

Die Cookie API bietet Methoden zur Weitergabe eines Cookies (z.B. Daten zur Spieler-ID oder zum Abschluss eines Levels) von einer Instant-App an die entsprechende installierte App. Im Gegensatz zu postInstallIntent-Extras ist der Cookie-Status auch dann verfügbar, wenn der Nutzer die installierte App nicht sofort startet. Eine Instant-App könnte beispielsweise den folgenden Code von einem Klick-Handler für Installationsschaltflächen aufrufen:

using Google.Play.Instant;
...
var playerInfo = /* Object serialized as a string representing game levels completed, etc. */;
var cookieBytes = System.Text.Encoding.UTF8.GetBytes(playerInfo);
try
{
    var maxCookieSize = CookieApi.GetInstantAppCookieMaxSize();
    if (cookieBytes.Length > maxCookieSize)
    {
        UnityEngine.Debug.LogErrorFormat("Cookie length {0} exceeds limit {1}.", cookieBytes.Length, maxCookieSize);
    }
    else if (CookieApi.SetInstantAppCookie(cookieBytes))
    {
        UnityEngine.Debug.Log("Successfully set cookie. Now display the app install dialog...");
        InstallLauncher.ShowInstallPrompt();
    }
    else
    {
        UnityEngine.Debug.LogError("Failed to set cookie.");
    }
}
catch (CookieApi.InstantAppCookieException ex)
{
    UnityEngine.Debug.LogErrorFormat("Failed to set cookie: {0}", ex);
}

Wenn der Nutzer die App-Installation abschließt, kann die installierte Anwendung die Cookie-Daten mit dem folgenden Code abrufen:

var cookieBytes = CookieApi.GetInstantAppCookie();
var playerInfoString = System.Text.Encoding.UTF8.GetString(cookieBytes);
if (!string.IsNullOrEmpty(playerInfoString))
{
    // Initialize game state based on the cookie, e.g. skip tutorial level completed in instant app.
}