Web Share Target permite que las AWP reciban contenido compartido de otras aplicaciones instaladas en el dispositivo. Esta función es utilizada, por ejemplo, en aplicaciones como editores de imágenes para recibir una imagen de una aplicación de cámara o de una red social para recibir una imagen o un video para compartir
A partir de Chrome 86, Web Share Target también está disponible para las aplicaciones que usan Actividad web de confianza. Si bien la AWP debería funcionar de inmediato, se requieren algunos cambios para la aplicación para Android.
En este artículo, se asume que el desarrollador está familiarizado con Trusted Web Activities. Lectores nuevos en Para comenzar a usar la tecnología, consulta la Guía de integración.
Del mismo modo, la explicación completa de la implementación del objetivo de Web Share en una AWP está fuera y los desarrolladores pueden encontrar más información en este artículo.
Se usará la aplicación de demostración https://scrapbook-pwa.web.app/ como AWP y su código fuente está disponible en GitHub, y la aplicación para Android se basa en la demostración básica de Trusted Web Activity.
Cómo agregar Web Share Target a la app para Android
Para modificar una aplicación existente basada en Trusted Web Activity para implementar Web Share Destino, se requieren modificaciones en tres archivos diferentes:
build.gradle
Se actualizó la biblioteca android-browser-helper para que sea compatible con Web Share Target. Como primer paso, actualiza la aplicación para usar una versión posterior o igual a 2.0.1.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
La aplicación debe indicar a la Actividad web de confianza los detalles del uso compartido que admite. como las URLs que se abrirán, el método que se usará y los tipos de MIME admitidos.
Esto se hace a través de un JSON, disponible para Trusted Web Activity con un recurso de cadenas. El
son iguales al campo share_target
disponible en el manifiesto web y se pueden agregar
una cadena dentro de strings.xml
, casi tal como está, con dos notas importantes:
- El valor del atributo de acción debe ser la URL completa, incluido el origen.
- Las comillas dobles deben escaparse, de modo que cada
"
se convierta en\"
.
Así se ve la sección share_target
de https://scrapbook-pwa.web.app/manifest.json
como:
{
...
"share_target": {
"action": "/_share-target",
"enctype": "multipart/form-data",
"method": "POST",
"params": {
"files": [{
"name": "media",
"accept": [
"audio/*",
"image/*",
"video/*"
]
}]
}
},
...
}
Y el nuevo elemento de cadena se verá de la siguiente manera:
<string name="share_target">
{
\"action\": \"https://twa-web-scrapbook.web.app/_share-target\",
\"method\": \"POST\",
\"enctype\": \"multipart/form-data\",
\"params\": {
\"files\": [{
\"name\": \"media\",
\"accept\": [\"image/*\", \"audio/*\", \"video/*\"]
}]
}
}
</string>
AndroidManifest.xml
Se deben realizar algunos cambios en el manifiesto de Android. Primero, debemos asegurarnos de que el
Se declara, exporta y habilita DelegationService
.
Los desarrolladores que compilaron su aplicación según la demostración básica ya tendrán el servicio y el lenguaje de marcado debe estar dentro de la etiqueta de aplicación y verse de la siguiente manera:
<service
android:name="com.google.androidbrowserhelper.trusted.DelegationService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
Por último, se deben agregar dos elementos nuevos a la etiqueta de actividad LauncherActivity:
- Una etiqueta meta-data
que haga referencia al JSON definido en strings.xml
- Un objeto intent-filter
que declara qué tipos de MIME la aplicación puede controlar
en el dispositivo.
<meta-data
android:name="android.support.customtabs.trusted.METADATA_SHARE_TARGET"
android:resource="@string/share_target"/>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
Como se puede ver en el lenguaje de marcado anterior, se debe agregar un elemento data
por cada mime-type
declarado
en el JSON share_target
.
Conclusión
La integración del objetivo de Web Share permite que las AWP dentro de una actividad web de confianza sean más profundas integrados con otras aplicaciones instaladas en un dispositivo Android.
Como se describió en los pasos anteriores, el lenguaje de marcado adicional necesario para agregar compatibilidad con la API en una android-browser-helper simplifica la app para Android existente que usa Trusted Web Activity.
Consulta el artículo sobre el Objetivo de Compartir en la Web para obtener más información sobre cómo usar la API en una AWP y la API de Web Share para obtener información sobre cómo compartir contenido desde la app web progresiva.
Soluciona problemas
Mi aplicación no aparece como opción cuando intento compartir un archivo desde otra aplicación.
Si la aplicación no se muestra como opción, esto indica que intent-filter
está
incorrecto. Vuelve a verificar el lenguaje de marcado de intent-filter
y asegúrate de que contenga las acciones correctas.
categoría y mime-types
controlados por la aplicación.
Mi aplicación muestra como opción que se inicia la AWP, pero los datos no se comparten.
Hay varias causas posibles. Esta es una lista de verificación de lo que debes tener en cuenta:
- Asegúrese de que la validación de Vínculos de recursos digitales sea exitosa.
- Revisa el JSON dentro de strings.xml para verificar que sea correcto.