Cómo crear un paquete de aplicación instantánea

Para crear una experiencia de Google Play Instant, debes incluirla como parte de un Android App Bundle. A este tipo de paquetes se lo conoce como paquete de aplicación instantánea. En este documento, se muestra cómo configurar el entorno de desarrollo para paquetes de aplicación instantánea, además de cómo configurarlos, compilarlos, probarlos y publicarlos.

Si tienes un proyecto de app instantánea que usa el complemento de funciones obsoleto (com.android.feature), obtén información sobre cómo migrar tu app instantánea para que sea compatible con Android App Bundles.

Cómo configurar el entorno de desarrollo

Para proporcionar una experiencia instantánea dentro de un paquete de aplicación, necesitas acceso al SDK de desarrollo de Google Play Instant. Puedes instalar el SDK con uno de los siguientes métodos:

  • Instala Android Studio 3.6 o una versión posterior. Después de abrir Android Studio, descarga el SDK de desarrollo de Google Play Instant desde la pestaña SDK Tools de SDK Manager.
  • Realiza la instalación desde la línea de comandos:

    cd path/to/android/sdk/tools/bin && \
      ./sdkmanager 'extras;google;instantapps'
    

Además, si deseas realizar una prueba de tu experiencia instantánea de forma local, debes obtener acceso a un dispositivo físico o virtual.

Más información sobre las condiciones de ejecución obligatorias

Google Play Instant ejecuta paquetes de aplicaciones instantáneas en un tipo especial de zona de pruebas de SELinux con el objetivo de ofrecer mayor seguridad. Esta zona de pruebas ofrece un subconjunto de permisos, así como tipos limitados de interacciones con otras apps. En las siguientes secciones, se explican con más detalle las características de esta zona de pruebas.

Permisos y operaciones compatibles

Los paquetes de aplicación instantánea solo pueden usar permisos de la siguiente lista:

Cómo procesar permisos comunes no admitidos

La siguiente lista contiene permisos comunes no compatibles que debes quitar de tu aplicación y la ruta de migración recomendada para cada uno:

  • ACCESS_WIFI_STATE: usa ACCESS_NETWORK_STATE, que debería proporcionar información similar a ACCESS_WIFI_STATE.
  • BILLING: es un permiso obsoleto. Usa la Biblioteca de Facturación Google Play, que ya no requiere el permiso com.android.vending.BILLING.
  • READ/WRITE_EXTERNAL_STORAGE: las Apps instantáneas no tienen acceso al almacenamiento externo. En su lugar, usa el almacenamiento interno.
  • com.google.android.c2dm.permission.RECEIVE y permission.C2D_MESSAGE: C2DM dejó de estar disponible. Migra a Firebase Cloud Messaging (FCM). FCM no requiere permisos adicionales para funcionar correctamente.

Además, los paquetes de aplicaciones instantáneas no pueden hacer lo siguiente:

Acceso a aplicaciones instaladas

Cuando desarrolles una experiencia instantánea, ten en cuenta que no podrá interactuar con las apps instaladas en un dispositivo, a menos que se cumpla una de las siguientes condiciones:

  • Una o más actividades de una aplicación instalada establecieron su elemento android:visibleToInstantApps en true. Ese elemento está disponible para aplicaciones que ejecutan Android 8.0 (nivel de API 26) o versiones posteriores.
  • Una app instalada contiene un filtro de intents que incluye CATEGORY_BROWSABLE.
  • La experiencia instantánea envía un intent utilizando la acción ACTION_SEND, ACTION_SENDTO o ACTION_SEND_MULTIPLE.

Cómo configurar un proyecto para experiencias instantáneas

Para que sea compatible con Google Play Instant, debes configurar atentamente varios aspectos del paquete de aplicación instantánea. En las siguientes secciones, se describe lo que debes tener en cuenta.

Declara dependencias del proyecto

Para usar las API de Google Play Instant en tu app, incluye la siguiente declaración en el archivo de configuración build.gradle perteneciente al módulo de tu app:

Groovy

implementation "com.google.android.gms:play-services-instantapps:17.0.0"

Kotlin

implementation("com.google.android.gms:play-services-instantapps:17.0.0")

Define los códigos de versión correctos

El código de versión de la experiencia instantánea de tu app debe ser inferior al de la app instalable. Se espera que los usuarios pasen de la experiencia de Google Play Instant a descargar e instalar la app en su dispositivo. El framework de Android considera esta transición como una actualización de app.

Para asegurarte de seguir el esquema de versiones que esperan los usuarios, implementa 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 del APK instalable en un número grande, como 1,000, a fin de asegurarte de que haya suficiente espacio para que aumente el número de versión de tu experiencia instantánea.

Es posible desarrollar una app instantánea y una instalable en dos proyectos independientes de Android Studio. Sin embargo, si lo haces, debes realizar lo siguiente para publicar tu app 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 app, consulta Cómo establecer la versión de tu app.

Actualiza la versión de la zona de pruebas objetivo

Se debe actualizar el archivo AndroidManifest.xml de tu app instantánea 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 app, 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.

Declara módulos de apps instantáneas

Puedes declarar que tu paquete de aplicación admite experiencias instantáneas utilizando uno de los siguientes métodos:

  • Si ya tienes un paquete de aplicación que contiene solo un módulo base, puedes habilitarlo de la siguiente manera:

    1. Abre el panel Project seleccionando View > Tool Windows > Project en la barra de menú.
    2. Haz clic con el botón derecho en el módulo base, que suele llamarse "app", y selecciona Refactor > Enable Instant Apps Support.
    3. En el cuadro de diálogo que aparece, selecciona el módulo base del menú desplegable.
    4. Haz clic en OK.

    Android Studio agrega la siguiente declaración al manifiesto del módulo:

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  • Si ya tienes un paquete de aplicación que contiene varios módulos, puedes crear un módulo de funciones de aplicación instantánea. Este proceso también habilita el módulo base de tu app para apps instantáneas, lo que te brinda la opción de admitir varios puntos de entrada instantáneos.

Agrega compatibilidad con el acceso

Si tu experiencia instantánea permite el acceso a los usuarios, tu paquete de aplicación instantánea debe ser compatible con Smart Lock para contraseñas en Android. Si estás compilando un juego instantáneo de Play, debes usar el acceso a los Servicios de juego de Google Play.

Admite el entorno de ejecución

Cuando crees tu paquete de aplicación instantánea, ten en cuenta lo siguiente para que resulte compatible con la zona de pruebas de SELinux en la que se ejecutan las experiencias instantáneas:

  • No compartas el valor de myUid(), que es el UID asignado por el kernel de tu app.
  • Si desarrollas tu app para Android 8.1 (nivel de API 27) o versiones anteriores, crea un archivo Network Security Config y configura cleartextTrafficPermitted como false. Las experiencias instantáneas no admiten el tráfico HTTP. En el caso de las apps desarrolladas para Android 9 o versiones posteriores, el tráfico de Cleartext está inhabilitado de forma predeterminada.
  • 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 app para preservar su progreso.

Cómo agregar lógica para flujos de trabajo de experiencia instantánea

Después de configurar tu paquete de aplicación para que admita experiencias instantáneas, agrega la lógica que se muestra en las siguientes secciones.

Comprueba si la app ofrece una experiencia instantánea

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

Muestra un mensaje de instalación

Si estás compilando una versión de prueba de tu app o juego, Google Play Instant te permite mostrar un mensaje en la experiencia instantánea que invita a los usuarios a instalar la experiencia completa en su dispositivo. Para mostrar este mensaje, usa el método InstantApps.showInstallPrompt(), como se muestra en el siguiente fragmento de código:

Kotlin

class MyInstantExperienceActivity : AppCompatActivity {
    // ...
    private fun showInstallPrompt() {
        val postInstall = Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_DEFAULT)
                .setPackage(your-installed-experience-package-name)

        // The request code is passed to startActivityForResult().
        InstantApps.showInstallPrompt(this@MyInstantExperienceActivity,
                postInstall, request-code, /* referrer= */ null)
    }
}

Java

public class MyInstantExperienceActivity extends AppCompatActivity {
    // ...
    private void showInstallPrompt() {
        Intent postInstall = new Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_DEFAULT)
                .setPackage(your-installed-experience-package-name);

        // The request code is passed to startActivityForResult().
        InstantApps.showInstallPrompt(MyInstantExperienceActivity.this,
                postInstall, request-code, /* referrer= */ null);
    }
}

Transfiere datos a una experiencia instalada

Si el usuario disfruta de tu experiencia instantánea, es posible que decida instalar la app. Para proporcionar una buena experiencia del usuario, es importante que se transfieran los datos de la experiencia instantánea a la versión completa de tu app.

Si el usuario utiliza un dispositivo que ejecuta Android 8.0 (nivel de API 26) o versiones posteriores y si tu app especifica un targetSandboxVersion de 2, se transferirán automáticamente los datos del usuario a la versión completa de tu app. De lo contrario, deberás transferir los datos de forma manual. Para hacerlo, usa una de las siguientes API:

  • Para los usuarios que usan dispositivos que ejecutan Android 8.0 (nivel de API 26) y versiones posteriores, usa la API de Cookie: App de ejemplo
  • Si los usuarios pueden interactuar con tu experiencia en dispositivos que ejecutan Android 7.1 (nivel de API 25) y versiones anteriores, agrega compatibilidad con la API de Storage: app de ejemplo.

Cómo compilar el paquete de aplicación

Puedes usar Android Studio o la interfaz de línea de comandos para compilar tu app instantánea.

Android Studio

En Android Studio, puedes compilar tu paquete de aplicación seleccionando Build > Build Bundle(s) / APK(s) > Build Bundle(s). Para obtener más información sobre cómo compilar tu proyecto, consulta Cómo compilar un proyecto.

Interfaz de línea de comandos

También puedes compilar el paquete de aplicación desde la línea de comandos utilizando Gradle.

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.

Cómo probar la experiencia instantánea

Antes de publicar tu paquete de aplicación instantánea, prueba la experiencia desde una de las siguientes ubicaciones a fin de comprobar la funcionalidad:

Android Studio

Para probar la experiencia instantánea de tu app en una máquina local con Android Studio, sigue estos pasos:

  1. Si tienes una versión instalada de tu app en el dispositivo de prueba, desinstálala.
  2. En Android Studio, en las opciones de instalación que aparecen en la pestaña General del diálogo Run/Debug Configurations, habilita la casilla de verificación Deploy as instant app.
  3. Selecciona Run > Run en la barra de menú o haz clic en Run en la barra de herramientas. Luego, elige el dispositivo en el que quieras probar las experiencias instantáneas de tu app. La experiencia instantánea de tu app se carga en el dispositivo de prueba que elegiste.

Interfaz de línea de comandos

Para probar la experiencia instantánea de tu app en una máquina local con la línea de comandos, sigue estos pasos:

  1. Si tienes una versión instalada de tu app en el dispositivo de prueba, desinstálala.
  2. Ingresa el siguiente comando para transferir y ejecutar tu app instantánea:
ia run output-from-build-command

Segmento de prueba interna

Para probar la experiencia instantánea de tu app desde Play Store o un banner en tu sitio web, publica la app en el segmento de prueba interna de Play Console.

Para publicar tu app en el segmento de prueba interna, completa los siguientes pasos:

  1. Para subir tu paquete de aplicación, sigue los pasos que se indican en la guía Cómo subir tu paquete de aplicación a Play Console.
  2. Prepara el paquete que subiste para iniciarlo en el segmento de prueba interna. Para obtener más información, consulta el artículo de asistencia sobre cómo preparar y lanzar versiones.
  3. Accede a una cuenta de verificador interno en un dispositivo y, luego, inicia tu experiencia instantánea desde una de las siguientes opciones:

    • El botón Probar ahora de la ficha de Play Store de tu app
    • Un vínculo de un banner del sitio web de tu app

Cómo publicar el paquete de aplicación en el segmento de producción

Para publicar tu paquete de aplicación instantánea, sigue estos pasos:

  1. Si aún no lo hiciste, firma tu paquete de aplicación con una clave de lanzamiento y súbelo a Play Console.
  2. En Play Console, abre Administración de lanzamientos > Apps instantáneas Android y ve hasta el segmento de producción de apps instantáneas.
  3. Selecciona Actualizar desde la biblioteca y, luego, elige el paquete de aplicación instantánea que subiste.

Elige dónde publicar tu experiencia instantánea

Se puede iniciar una experiencia instantánea de tu app en un subconjunto de países y regiones donde los usuarios puedan instalarla. Esta función es útil si deseas promocionar la experiencia instantánea de tu app para usuarios que residan en un conjunto específico de países y regiones.

Recursos adicionales

Para obtener más información sobre cómo crear experiencias instantáneas y Android App Bundles, consulta los siguientes recursos:

Video: Cómo compilar una app instantáneamente
Obtén información para agregar una experiencia instantánea a un Android App Bundle en esta sesión de Android Dev Summit 2018.
Video: Cómo publicar apps más pequeñas con Android App Bundle
Descubre cómo los paquetes de aplicaciones te ayudan a desarrollar tu app con mayor rapidez y a crear APKs más pequeños para los usuarios.
Codelab: Tu primer Android App Bundle
Esta es una guía paso a paso para crear un Android App Bundle y agregarle funciones.
El formato de Android App Bundle
Obtén más información sobre cómo el programa de línea de comandos bundletool organiza un paquete de aplicación a partir del código y los recursos de tu app.