Cómo agregar compatibilidad con el acceso instantáneo

Los pasos para configurar apps que se ejecuten en Google Play Instant, detallados en Cómo crear tu primera app instantánea, también se aplican a juegos. En esta guía, se hace énfasis en algunos pasos de configuración específicos para juegos.

Puedes desarrollar juegos para Google Play Instant con Unity (con o sin el complemento de Unity de Google Play Instant), Cocos2D, Android Studio o tu propio motor personalizado.

En la guía, se asume que ya sabes qué tipo de experiencia de juego quieres brindar. Si quieres ver ideas y prácticas recomendadas para crear juegos de alta calidad, lee Prácticas recomendadas de UX para juegos en Google Play Instant.

Además, antes de publicar un juego que puede ejecutarse en Google Play Instant, deberías revisar la Lista de verificación de requisitos técnicos para juegos.

Una actividad que incluye el siguiente filtro de intents se convierte en el punto de entrada para la experiencia de Google Play Instant:

<activity android:name=".GameActivity">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

Esta actividad se inicia cuando un usuario presiona el botón Probar ahora en Play Store o el botón Juego instantáneo en la app de Google Play Juegos. También puedes iniciar esta actividad directamente con la API de vínculo directo.

Define los códigos de versión correctos

El código de versión de la experiencia instantánea del juego debe ser inferior al del juego instalable. Este control de versiones de tu app permite que los jugadores pasen de la experiencia de Google Play Instant a descargar e instalar el juego en sus dispositivos. El framework de Android considera esta transición como una actualización de app.

Para asegurarte de cumplir con el esquema de control de versiones recomendado, sigue una de estas estrategias:

  • Reinicia los códigos de versión para la experiencia en Google Play Instant en 1.
  • Aumenta el código de versión de la app instalable a un número grande, como 1,000, para asegurarte de que haya suficiente espacio para que aumente el número de versión de tu experiencia instantánea.

Es posible desarrollar un juego instantáneo y uno instalable en dos proyectos independientes de Android Studio. Sin embargo, si lo haces, debes hacer lo siguiente para publicar tu juego en Google Play:

  1. Usa el mismo nombre de paquete en ambos proyectos de Android Studio.
  2. En Google Play Console, sube ambas variantes a la misma aplicación.

Para obtener más información sobre cómo configurar la versión de tu juego, consulta Cómo establecer la versión de tu app.

Admite el entorno de ejecución

Al igual que otras apps, los juegos de Google Play Instant se ejecutan dentro de una zona de pruebas limitada en el dispositivo. Para admitir este entorno de ejecución, completa los pasos que se muestran en las siguientes secciones.

Inhabilita el tráfico de texto simple

Los juegos de Google Play Instant no admiten tráfico HTTP. Si tu juego está orientado a Android 9 (nivel de API 28) o versiones posteriores, Android inhabilitará de forma predeterminada la compatibilidad con el texto simple.

Sin embargo, si el juego se orienta a Android 8.1 (nivel de API 27) o versiones anteriores, debes crear un archivo de configuración de seguridad de la red. En este archivo, establece cleartextTrafficPermitted como false, como se muestra en el siguiente fragmento de código:

res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

Actualiza la versión de la zona de pruebas objetivo

Actualiza el archivo AndroidManifest.xml de tu juego instantáneo para que se oriente al entorno de la zona de pruebas que admite Google Play Instant. Para completar esta actualización, agrega el atributo android:targetSandboxVersion al elemento <manifest> de tu juego, como se muestra en el siguiente fragmento de código:

<manifest
   xmlns:android="http://schemas.android.com/apk/res/android"
  ...
   android:targetSandboxVersion="2" ...>

Para obtener más información, consulta la documentación sobre el atributo targetSandboxVersion.

No dependas de la presencia de una caché ni datos de la app

Tu experiencia instantánea permanece descargada en el dispositivo de un usuario hasta que se borra la caché de la experiencia instantánea, lo que puede suceder en una de las siguientes situaciones:

  • La memoria caché de la experiencia instantánea se recolecta como elemento no utilizado porque el dispositivo tiene poca memoria disponible.
  • El usuario reinicia su dispositivo.

Ante alguna de esas situaciones, el usuario deberá volver a descargar tu experiencia instantánea para interactuar con ella.

Si el sistema tiene muy poco espacio de almacenamiento, es posible que se quiten del almacenamiento interno los datos del usuario de tu experiencia instantánea. Por lo tanto, se recomienda sincronizar periódicamente los datos del usuario con el servidor de tu juego para preservar el progreso del usuario.

Reduce el tamaño de tu app

A diferencia de otros tipos de apps, los juegos en Google Play Instant tienen un límite de tamaño de descarga de 15 MB. Para crear un juego de este tamaño, es posible que tengas que refactorizar su lógica. En esta sección, se describen algunas herramientas y técnicas que te ayudarán a optimizar el tamaño de tu juego.

Herramientas

La siguiente lista de herramientas puede ayudarte a determinar qué está contribuyendo al tamaño de tu juego:

  • Analizador de APK: Proporciona una vista integral del contenido de un APK compilado. Con esta vista, puedes determinar la cantidad de bytes que cada elemento contribuye al tamaño general. Usa esta herramienta para comprobar rápidamente el tamaño de los recursos, elementos, lógica y bibliotecas nativas que usa tu juego.
  • Bloaty McBloatface: Muestra el perfil de tamaño de los archivos binarios.
  • Inspector de GPU de Android: Permite ver el efecto del tamaño del archivo al reducir el tamaño de la textura sin tener que recompilar tu juego.

Técnicas

En la siguiente lista, se enumeran las técnicas que puedes usar para reducir el tamaño de tu juego:

  • Extrae parte de la lógica del juego y colócala en uno o más módulos de funciones, que no cuentan en el límite de tamaño.
  • Reduce la resolución de las texturas de tu juego.
  • Considera usar el formato WebP, especialmente si usas texturas sin comprimir en la GPU. El formato WebP crea imágenes que tienen la misma calidad que las imágenes JPEG, pero son entre un 15% y un 30% más pequeñas. Si bien lleva más tiempo descomprimir imágenes de WebP, ese tiempo de descompresión sigue siendo significativamente más breve que el tiempo de descarga de las texturas de tu juego. Google también integró el formato a un motor de juegos de código abierto.
  • Comprime o reutiliza sonidos y música.
  • Usa diferentes marcas de compilación para reducir el tamaño de tu archivo binario:
    • -fvisibility=hidden: es el más importante. En cmake, puedes especificarlo de la siguiente manera:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
      
    • -Oz: también es importante para reducir el tamaño. Si compilas con gcc, usa -Os en su lugar.
    • -flto: a veces, disminuye el tamaño del archivo.
    • Marcas del vinculador: usa --gc-sections junto con marcas del compilador, como -ffunction-sections y -fdata-sections.
  • Usa Proguard para reducir tu código y recursos.
  • Usa Gradle 4.4 o versiones posteriores para generar archivos DEX más pequeños.
  • Implementa la entrega de recursos en la nube.

Divide un juego grande en varios APK

Puede resultar difícil optimizar la experiencia de Google Play Instant para que tu juego se ajuste a un solo APK de 15 MB, incluso después de aplicar las recomendaciones sobre cómo reducir el tamaño del APK. Para enfrentar este desafío, puedes dividir tu juego en varios APK. Los jugadores comienzan por descargar el APK base principal y, mientras juegan, los demás APK divididos se agregan en el juego en segundo plano.

Por ejemplo, el APK base puede contener el motor de juego principal y los elementos necesarios para que aparezca la pantalla de carga. Mientras se inicia el APK base, la pantalla de carga inmediatamente solicita un APK dividido que contiene los datos del juego y los niveles. Una vez que el APK dividido está disponible, puede cargar sus elementos en el motor de juego y ofrecerle al jugador el contenido necesario para comenzar a jugar.

Implementa las prácticas recomendadas de UX

Después de configurar tu juego para que admita experiencias instantáneas, agrega la lógica que se muestra en las siguientes secciones para proporcionar una buena experiencia del usuario.

Compatibilidad con arquitecturas de 64 bits

Las apps publicadas en Google Play deben ser compatibles con arquitecturas de 64 bits. Si agregas una versión de 64 bits a la app, mejorarás su rendimiento y te preparará para dispositivos con hardware de 64 bits únicamente. Obtén más información acerca de la compatibilidad con 64 bits.

Verifica si el juego tiene experiencia instantánea activa

Si parte de la lógica de tu juego depende de si el usuario participa en tu experiencia instantánea, llama al método isInstantApp(). Este método muestra true si el proceso actual es una experiencia instantánea.

Si haces esta verificación, puedes determinar si la app debe ejecutarse dentro de un entorno de ejecución limitado o si puede aprovechar las funciones de la plataforma.

Muestra un mensaje de instalación

Si creaste una experiencia de Google Play Instant de prueba, en algún punto, el juego debería solicitar al jugador que instale la versión completa en su dispositivo. Para hacerlo, usa el método showInstallPrompt() en las API de Google para Android.

Para obtener más información sobre cómo y cuándo deberías solicitar al jugador que realice la instalación, consulta Prácticas recomendadas de UX para juegos en Google Play Instant.

Transfiere datos a una experiencia instalada

Si un jugador disfruta de tu experiencia de prueba, es posible que decida instalar la versión completa del juego. Para proporcionar una buena experiencia del usuario, es importante que el progreso del jugador se transfiera de la experiencia instantánea a la versión completa del juego.

Si el juego especifica un targetSandboxVersion de 2, el progreso del jugador se transfiere automáticamente a la versión completa. De lo contrario, debes transferir los datos relacionados con el progreso del jugador de forma manual. Para hacerlo, usa la API de Cookie: App de ejemplo

Recursos adicionales

Obtén más información sobre Google Play Instant en estos recursos adicionales:

Codelab: Compila tu primera app instantánea
Agrega compatibilidad con Google Play Instant a una app existente.
Codelab: Compila una app con varias funciones
Modulariza una app con varias funciones.