Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 este complemento.

Cómo descargar e importar el complemento

Los pasos que debes seguir varían según la versión de Unity que uses:

Unity 5.6 a 2018.3

Para estas versiones de Unity, el complemento forma parte de los complementos de Google Play para Unity. Para importar el complemento, sigue estos pasos:

  1. Descarga la versión más reciente de los 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.

Unity 2018.4 y versiones posteriores

Para estas versiones de Unity, se distribuye el complemento a través de Game Package Registry for Unity. Para importar el complemento, sigue estos pasos:

  1. Configura Game Package Registry for Unity.

  2. Selecciona el paquete de Google Play Instant en el Unity Package Manager y haz clic en Install.

Funciones de Unity Editor

Importa el complemento para agregar un submenú Google > Play Instant en Unity. Este submenú proporciona las siguientes opciones.

Build Settings

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

  • Crea un símbolo de definición de secuencias de comandos llamado PLAY_INSTANT que se puede usar para secuencias de comandos con #if PLAY_INSTANT y #endif.
  • Administra 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 para ayudarte a 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: El 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 el 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 y, después de que esta se inicia, se recupera el AssetBundle de un servidor.

Cómo admitir 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 para mostrar un diálogo de instalación desde Play Store y para transferir el estado de la app de instantánea a la instalada.

Cómo mostrar un mensaje de instalación

Una app instantánea con 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. Para obtener 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 para 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 usando 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.
    }