Usa Google Play Instant con Unity

El complemento Google Play Instant para Unity configura tu proyecto de Unity para crear una versión de app instantánea de tu juego. En esta guía, se describe cómo instalar y usar ese complemento.

Cómo descargar e importar el complemento

El complemento es parte de los Complementos de Google Play para Unity. Para importar el complemento, sigue los pasos que se indican a continuación:

  1. Descarga la versión más reciente de Complementos de Google Play para lanzamientos de Unity.
  2. Importa el archivo .unitypackage. Para ello, selecciona la opción del menú de IDE de Unity Assets > Import package > Custom Package e importa todos los elementos.

Funciones de Unity Editor

Importa el complemento para agregar un submenú Google > Play Instant en Unity. En ese submenú, se proporcionan las siguientes opciones.

Build Settings

Abre una ventana que permite alternar entre los modos de desarrollo Installed e Instant. Si cambias a Instant, podrás realizar las siguientes modificaciones:

  • Crear un símbolo de definición de secuencias de comandos llamado PLAY_INSTANT que se pueda usar para secuencias de comandos con #if PLAY_INSTANT y #endif
  • Administrar las actualizaciones del archivo AndroidManifest.xml para algunos cambios necesarios, como android:targetSandboxVersion

Player Settings

En el diálogo Player Settings, que se muestra en la Figura 1, se incluyen sugerencias que te permitirán optimizar la compatibilidad con Google Play Instant, desarrollar con más API de gráficos compatibles y reducir el tamaño de tu APK.

Las sugerencias específicas incluyen usar solamente OpenGL ES 2.0 e inhabilitar el procesamiento de subprocesos múltiples.
Figura 1: Diálogo Player Settings

Esta configuración se divide en Required y Recommended. Si una configuración tiene el botón Update correspondiente, haz clic en él para cambiar la configuración al valor preferido.

Para reducir aún más el tamaño del APK, abre Unity Package Manager y quita los paquetes que no uses.

Quick Deploy

Quick Deploy puede ayudarte a reducir el tamaño de una app instantánea basada en Unity mediante el empaquetado de algunos activos en un AssetBundle. Cuando usas Quick Deploy, se empaqueta el motor de juego de Unity y una pantalla de carga en un APK de app instantánea. Después de que esta se inicia, se recupera el AssetBundle de un servidor.

Admite flujos de trabajo de instalación

El objetivo de muchas apps instantáneas es brindar a los usuarios la oportunidad de probarla antes de instalar la versión completa. El complemento de Google Play Instant para Unity proporciona API que muestran un diálogo de instalación desde Play Store y transfieren el estado de la app de instantánea a la instalada.

Cómo mostrar un mensaje de instalación

Una app instantánea que tiene un botón Instalar puede mostrar un diálogo de instalación desde Play Store llamando al método siguiente desde un controlador de clics de botón de instalación:

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

El método ShowInstallPrompt() tiene una sobrecarga que permite una o más de las siguientes opciones:

  • Determinar si el usuario cancela el proceso de instalación. Anular onActivityResult() en la actividad principal de la app instantánea y buscar RESULT_CANCELED en el requestCode especificado.
  • Pasar una string de referencia de instalación mediante el parámetro referrer.
  • Pasar el estado de la sesión actual del juego mediante PutPostInstallIntentStringExtra().

Esto se demuestra en el siguiente ejemplo:

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 el usuario completa la instalación de la app, Play Store volverá a iniciarla usando el postInstallIntent proporcionado. La app instalada puede recuperar un valor establecido en postInstallIntent mediante el siguiente comando:

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

Notas:

  • Es posible que los campos adicionales incluidos en postInstallIntent no lleguen a la app instalada si el usuario instala la app, pero cancela el inicio posterior a la instalación. Pasar campos adicionales de intents es más adecuado para conservar el estado activo de la sesión que para conservar el estado persistente. Si necesitas información sobre este último, consulta la API de Cookie.
  • Cualquiera puede crear un intent con campos adicionales para iniciar la app instalada. Si la carga útil otorga algo de valor, diséñala de modo que solo se pueda usar una vez, fírmala criptográficamente y verifica la firma en un servidor.

La API de Cookie proporciona métodos para pasar una cookie (p. ej., un ID de jugador o datos de finalización de nivel) de una app instantánea a la app instalada correspondiente. A diferencia de los campos adicionales de postInstallIntent, el estado de la cookie está disponible incluso si el usuario no inicia inmediatamente la app instalada. Por ejemplo, una app instantánea podría llamar al siguiente código desde un controlador de clics de botón de instalación:

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 el usuario completa la instalación de la app, esta puede recuperar los datos de la cookie mediante el siguiente código:

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