WebAPK en Android

Cuando el usuario agrega tu app web progresiva a la pantalla principal en Android, Chrome genera automáticamente un APK, que a veces llamamos WebAPK. La instalación a través de un APK permite que tu app aparezca en el selector de apps, en la configuración de la app de Android y que registre un conjunto de filtros de intents.

Instalar una AWP en Android hace más que solo agregar la app web progresiva a la pantalla principal del usuario. Chrome genera e instala automáticamente un APK especial de tu app. A veces, nos referimos a esto como un WebAPK. La instalación a través de un APK permite que tu app aparezca en el selector de apps, en la configuración de la app de Android y que registre un conjunto de filtros de intents.

Para generar el WebAPK, Chrome analiza el manifiesto de la app web y otros metadatos. Cuando se detecte una actualización del manifiesto, Chrome deberá generar un APK nuevo.

Filtros de intents de Android

Cuando se instala una app web progresiva en Android, se registra un conjunto de filtros de intents para todas las URLs dentro del alcance de la app. Cuando un usuario hace clic en un vínculo que está dentro del alcance de la app, se abre la app, en lugar de abrirse en una pestaña del navegador.

Considera el siguiente manifest.json parcial:

"start_url": "/",
"display": "standalone",

Cuando se inicia una app web que lo usa desde el selector de apps, se abre https://example.com/ como una app independiente, sin ningún navegador Chrome.

El WebAPK incluiría los siguientes filtros de intents:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/" />
</intent-filter>

Si el usuario hace clic en un vínculo dentro de una app instalada para https://example.com/read, el intent lo detectará y lo abrirá en la app web progresiva.

Usa scope para restringir los filtros de intents

Si no quieres que tu app web progresiva controle todas las URLs de tu sitio, puedes agregar la propiedad scope a tu manifiesto de app web. La propiedad scope le indica a Android que solo abra tu app web si la URL coincide con origin + scope. Te permite controlar qué URLs manejará tu app y cuáles se deben abrir en el navegador. Esto es útil cuando tienes tu app y otro contenido que no es de la app en el mismo dominio.

Considera el siguiente manifest.json parcial:

"scope": "/app/",
"start_url": "/app/",
"display": "standalone",

Cuando se iniciaba desde el selector de apps, se abría https://example.com/app/ como una app independiente, sin ningún navegador Chrome.

Al igual que antes, el WebAPK generado incluiría un filtro de intents, pero con un atributo android:pathPrefix diferente en el AndroidManifest.xml del APK:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/app/" />
</intent-filter>

Veamos algunos ejemplos:

Qué debes hacer

https://example.com/app/: Dentro de /app/

Qué debes hacer

https://example.com/app/read/book: Dentro de /app/

Qué no debes hacer

https://example.com/help/: No está en /app/.

Qué no debes hacer

https://example.com/about/: No está en /app/.

Consulta scope para obtener más información sobre scope, lo que sucede cuando no lo configuras y cómo puedes usarlo para definir el alcance de tu app.

Administra permisos

Los permisos funcionan de la misma manera que otras apps web y no se pueden solicitar en el momento de la instalación. En cambio, se deben solicitar en el tiempo de ejecución, idealmente solo cuando realmente los necesites. Por ejemplo, no solicites permiso de la cámara en la primera carga, sino que espera a que el usuario intente tomar una foto.

Cómo administrar el almacenamiento y el estado de la app

Aunque la app web progresiva se instala a través de un APK, Chrome usa el perfil actual para almacenar los datos y no se segregará. Esto permite una experiencia compartida entre el navegador y la app instalada. Las cookies se comparten y están activas, se puede acceder a cualquier almacenamiento del cliente y el trabajador de servicios está instalado y listo para funcionar.

Actualiza el WebAPK

La información sobre cómo se actualiza un WebAPK se trasladó a Cómo maneja Chrome las actualizaciones del manifiesto de la app web.

Preguntas frecuentes

¿Qué íconos se usan para generar la pantalla de presentación? :
Te recomendamos que proporciones al menos dos íconos: 192 px y 512 px para la pantalla de presentación. Nos informaste que los íconos de la pantalla de presentación eran demasiado pequeños. Los WebAPKs generados en Chrome 71 o versiones posteriores mostrarán un ícono más grande en la pantalla de presentación. No es necesario que realices ninguna acción, siempre que se proporcionen los íconos recomendados.
¿Qué sucede si el usuario ya instaló la app nativa del sitio?
Al igual que la opción para agregar a la pantalla principal que existe actualmente, los usuarios podrán agregar un sitio independiente de cualquier app nativa. Si esperas que los usuarios instalen ambos, te recomendamos diferenciar el ícono o el nombre de tu sitio de la app nativa.
¿Se borrará el almacenamiento de mi sitio instalado si el usuario borra la caché de Chrome?
Sí.
¿Mi app se volverá a instalar cuando obtenga un dispositivo nuevo?
No por el momento, pero creemos que es un área importante y estamos investigando formas de hacerlo funcionar.
¿Cómo se manejan los permisos? ¿Veré el mensaje de Chrome o el de Android?
Los permisos se seguirán administrando a través de Chrome. Los usuarios verán los mensajes de Chrome para otorgar permisos y podrán editarlos en la configuración de Chrome.
¿En qué versiones de Android funcionará?
Las apps web progresivas se pueden instalar en todas las versiones de Android que ejecutan Chrome para Android, específicamente Jelly Bean y versiones posteriores.
¿Usa WebView?
No, el sitio se abre en la versión de Chrome desde la que el usuario lo agregó.
¿Podemos subir los APKs creados a Play Store?
No. Si quieres subir tu propio APK, consulta Actividades web de confianza.
¿Aparecen en Play Store?
No. Si quieres subir tu propio APK para que aparezca en Play Store, consulta Actividades web de confianza.
Soy desarrollador de otro navegador para Android. ¿Puedo tener este proceso de instalación sin problemas? :
Estamos trabajando en ello. Nos comprometemos a que esta función esté disponible para todos los navegadores en Android y pronto tendremos más detalles.