Utiliser Google Play Instant avec Unity

Le plug-in Google Play Instant pour Unity configure votre projet Unity afin de créer une version d'appli instantanée de votre jeu. Ce guide explique comment installer et utiliser ce plug-in.

Télécharger et importer le plug-in

Le plug-in fait partie des plug-ins Google Play pour Unity. Pour importer le plug-in, procédez comme suit:

  1. Téléchargez la dernière version des plug-ins Google Play pour les versions Unity.
  2. Importez le fichier .unitypackage en sélectionnant l'option de menu de l'IDE Unity Assets > Import package > Custom Package (Ressources > Importer un package > Package personnalisé), puis en important tous les éléments.

Fonctionnalités de l'éditeur Unity

Importez le plug-in pour ajouter un sous-menu Google > Play Instant dans Unity. Ce sous-menu fournit les options suivantes.

Paramètres de compilation

Ouvre une fenêtre permettant de basculer entre les modes de développement Installé et Instantané. Le passage à Instantané entraîne les modifications suivantes:

  • Permet de créer un symbole de définition de script appelé PLAY_INSTANT, qui peut être utilisé pour la création de scripts avec #if PLAY_INSTANT et #endif.
  • Gère les mises à jour du fichier AndroidManifest.xml pour certaines modifications requises, telles que android:targetSandboxVersion.

Paramètres du lecteur

La boîte de dialogue Player Settings (Paramètres du joueur), illustrée à la figure 1, affiche des suggestions pour vous aider à optimiser la compatibilité avec Google Play Instant, à développer des applications avec des API graphiques plus compatibles et à réduire la taille de votre APK.

Nous vous suggérons notamment d'utiliser OpenGL ES 2.0 uniquement et de désactiver le rendu multithread.
Figure 1. Boîte de dialogue Player Settings (Paramètres du lecteur)

Les paramètres du lecteur sont divisés en paramètres obligatoires et recommandés. Si un paramètre est associé à un bouton Update (Mettre à jour), cliquez dessus pour définir le paramètre sur la valeur souhaitée.

Pour réduire davantage la taille de l'APK, ouvrez le gestionnaire de packages Unity et supprimez tous les packages inutilisés.

Déploiement rapide

Quick Deploy peut réduire la taille d'une application instantanée basée sur Unity en empaquetant certains éléments dans un AssetBundle. Lorsque vous utilisez Quick Deploy, le moteur de jeu Unity et un écran de chargement sont empaquetés dans un APK d'application instantanée. Après le démarrage de l'application instantanée, celle-ci récupère l'AssetBundle sur un serveur.

Prendre en charge les workflows d'installation

L'objectif de nombreuses applications instantanées est de donner aux utilisateurs la possibilité de découvrir l'application avant d'installer la version complète. Le plug-in Google Play Instant pour Unity fournit des API permettant d'afficher une boîte de dialogue d'installation du Play Store et de transférer l'état de l'appli instantanée vers l'application installée.

Afficher une invite d'installation

Une application instantanée avec un bouton Install (Installer) peut afficher une boîte de dialogue d'installation du Play Store en appelant la méthode suivante à partir d'un gestionnaire de clics de bouton d'installation:

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

La méthode ShowInstallPrompt() présente une surcharge qui autorise un ou plusieurs des éléments suivants:

  • Déterminer si l'utilisateur annule le processus d'installation. Ignorez onActivityResult() dans l'activité principale de l'application instantanée et vérifiez RESULT_CANCELED sur le requestCode spécifié.
  • Transmettre une chaîne d'URL de provenance de l'installation via le paramètre referrer.
  • Transmission de l'état concernant la session de jeu en cours via PutPostInstallIntentStringExtra().

Ces éléments sont illustrés dans l'exemple suivant:

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");
}

Si l'utilisateur termine l'installation de l'application, le Play Store la redémarre avec le postInstallIntent fourni. L'application installée peut récupérer une valeur définie dans postInstallIntent à l'aide des éléments suivants:

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

Remarques :

  • Les extras inclus dans postInstallIntent peuvent ne pas atteindre l'application installée si l'utilisateur l'installe, mais annule le lancement post-installation. La transmission d'extras d'intent est plus adaptée pour conserver l'état d'une session active que pour conserver un état persistant. Dans ce dernier cas, reportez-vous à l'API Cookie.
  • N'importe qui peut créer un intent avec des champs supplémentaires pour lancer l'application installée. Par conséquent, si la charge utile apporte quelque chose de valeur, concevez la charge utile de sorte qu'elle ne puisse être utilisée qu'une seule fois, signez-la de manière cryptographique et vérifiez la signature sur un serveur.

L'API Cookie fournit des méthodes pour transmettre un cookie (par exemple, l'ID de joueur ou les données de fin de niveau) d'une application instantanée à l'application installée correspondante. Contrairement aux extras postInstallIntent, l'état du cookie est disponible même si l'utilisateur ne lance pas immédiatement l'application installée. Par exemple, une application instantanée peut appeler le code suivant à partir d'un gestionnaire de clics sur le bouton d'installation:

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);
}

Si l'utilisateur termine l'installation de l'application, celle-ci peut récupérer les données des cookies à l'aide du code suivant:

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.
}