WebAPK en Android

Cuando el usuario agrega tu Progressive Web App a la pantalla de inicio de Android, Chrome genera automáticamente un APK, que a veces llamamos WebAPK. Cuando se instala a través de un APK, tu app puede aparecer en el selector de aplicaciones, en la configuración de apps de Android, y registrar 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. En ocasiones, nos referimos a esto como WebAPK. Cuando se instala a través de un APK, tu app puede aparecer en el selector de aplicaciones, en la configuración de apps de Android, y registrar un conjunto de filtros de intents.

Para generar el WebAPK, Chrome observa 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 instale una app web progresiva en Android, se registrará un conjunto de filtros de intents para todas las URLs dentro del alcance de la app. Cuando un usuario haga clic en un vínculo que esté dentro del alcance de la app, esta se abrirá en lugar de dentro de una pestaña del navegador.

Considera el siguiente manifest.json parcial:

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

Cuando una app web que la usa se inicia desde el selector de aplicaciones, se abre https://example.com/ como una app independiente, sin ninguna navegador Chrome.

El WebAPK debería incluir 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 que dirige a https://example.com/read, el intent lo captará y se abrirá en la app web progresiva.

Cómo usar scope para restringir filtros de intents

Si no quieres que tu app web progresiva controle todas las URLs dentro de tu sitio, puedes agregar la propiedad scope al manifiesto de la 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 controlará tu app y cuáles se deben abrir en el navegador. Esto es útil cuando tienes tu app y otro contenido ajeno a ella en el mismo dominio.

Considera el siguiente manifest.json parcial:

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

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

Al igual que antes, el WebAPK generado debería incluir 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>

Estos son algunos ejemplos:

https://example.com/app/, en un radio de /app/

https://example.com/app/read/book, en un radio de /app/

Qué no debes hacer

https://example.com/help/ - no en /app/

Qué no debes hacer

https://example.com/about/ - no en /app/

Consulta scope para obtener más información sobre scope, qué 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 durante la instalación. En cambio, deben solicitarse en el tiempo de ejecución, idealmente solo cuando en verdad las necesites. Por ejemplo, no solicites permiso de acceso a la cámara durante la primera carga. En su lugar, espera a que el usuario intente tomar una foto.

Administra el almacenamiento y el estado de la app

Si bien la app web progresiva se instala mediante un APK, Chrome usa el perfil actual para almacenar datos y no se segregará. Esto permite una experiencia compartida entre el navegador y la app instalada. Las cookies se comparten y activas, se puede acceder a cualquier almacenamiento del cliente y el service worker está instalado y listo para usarse.

Cómo actualizar el WebAPK

La información sobre cómo se actualiza un WebAPK se trasladó a Cómo Chrome maneja 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 dijeron que los íconos de la pantalla de presentación eran demasiado pequeños. Los WebAPK generados en Chrome 71 o versiones posteriores mostrarán un ícono más grande en la pantalla de presentación. No es necesario realizar ninguna acción, siempre y cuando se proporcionen los íconos recomendados.
¿Qué sucede si el usuario ya instaló la aplicación nativa para el sitio?
Tal como sucede actualmente con la opción Agregar a la pantalla principal, los usuarios podrán agregar un sitio independiente de cualquier app nativa. Si esperas que los usuarios puedan instalar ambos, te recomendamos que diferencien el ícono o el nombre del sitio del de la app nativa.
¿Se liberará el almacenamiento del sitio instalado si el usuario borra la caché de Chrome?
Sí.
¿Se reinstalará mi app cuando tenga un dispositivo nuevo?
Por ahora no, pero creemos que es un área importante y estamos investigando formas de lograr que funcione.
¿Cómo se manejan los permisos? ¿Veré el mensaje de Chrome o los 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 en Jelly Bean y versiones posteriores.
¿Se usa WebView?
No, el sitio se abrirá en la versión de Chrome desde donde lo agregó el usuario.
¿Podemos subir los APKs que se crean a Play Store?
No. Si quieres subir tu propio APK, consulta Trusted Web Activities.
¿Aparecen en Play Store?
No. Si quieres subir tu propio APK para publicarlo en Play Store, consulta Trusted Web Activities.
Soy desarrollador de otro navegador en Android, ¿puedo realizar este proceso de instalación sin problemas? :
Estamos trabajando en ello. Nos comprometemos a que esté disponible para todos los navegadores de Android y pronto tendremos más detalles.