Cible de partage Web permet aux PWA de recevoir du contenu partagé à partir d'autres applications installées sur l'appareil. Cette fonctionnalité peut être utilisée, par exemple, par des applications telles que des éditeurs d'images pour recevoir une image à partir d'une application d'appareil photo ou d'un réseau social pour recevoir une image ou une vidéo à partager.
À partir de Chrome 86, la cible de partage Web est également disponible pour les applications qui utilisent l'activité Web fiable. Bien que la PWA devrait fonctionner dès la sortie de la boîte, quelques modifications sont nécessaires à l'application Android.
Cet article suppose que le développeur connaît les activités Web fiables. Les lecteurs qui ne connaissent pas cette technologie peuvent commencer par le guide d'intégration.
De même, une explication complète de l'implémentation de la cible de partage Web dans une PWA n'entre pas dans le champ d'application de cet article. Pour en savoir plus, consultez cet article.
L'application de démonstration disponible à l'adresse https://scrapbook-pwa.web.app/ sera utilisée comme PWA pour cet article. Son code source est disponible sur GitHub, et l'application Android est basée sur la démonstration de base de l'activité Web fiable.
Ajouter une cible de partage Web à l'application Android
Pour modifier une application basée sur une activité Web fiable existante afin d'implémenter la cible de partage Web, vous devez modifier trois fichiers différents:
build.gradle
La bibliothèque android-browser-helper a été mise à jour pour prendre en charge la cible de partage Web. Commencez par mettre à jour l'application pour qu'elle utilise une version supérieure ou égale à 2.0.1.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
L'application doit indiquer à l'activité Web fiable les détails du partage qu'elle accepte de recevoir, tels que les URL à ouvrir, la méthode à utiliser et les types mime compatibles.
Pour ce faire, utilisez un fichier JSON mis à la disposition de l'activité Web sécurisée avec une ressource de chaîne. Les champs sont identiques au champ share_target
disponible dans le fichier manifeste Web et peuvent être ajoutés à une chaîne dans strings.xml
, presque tels quels, avec deux remarques importantes:
- La valeur de l'attribut action doit être l'URL complète, y compris l'origine.
- Les doubles guillemets doivent être échappés, de sorte que chaque
"
devienne\"
.
Voici à quoi ressemble la section share_target
de https://scrapbook-pwa.web.app/manifest.json:
{
...
"share_target": {
"action": "/_share-target",
"enctype": "multipart/form-data",
"method": "POST",
"params": {
"files": [{
"name": "media",
"accept": [
"audio/*",
"image/*",
"video/*"
]
}]
}
},
...
}
Le nouvel élément de chaîne se présentera comme suit:
<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
Quelques modifications sont requises dans le fichier manifeste Android. Tout d'abord, nous devons nous assurer que DelegationService
est déclaré, exporté et activé.
Les développeurs qui ont créé leur application à partir de la démonstration de base auront déjà inclus le service. Le balisage doit se trouver dans la balise d'application et se présenter comme suit:
<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>
Enfin, deux nouveaux éléments doivent être ajoutés à la balise d'activité LauncherActivity :
- Une balise meta-data
qui fait référence au fichier JSON défini dans strings.xml.
- Un intent-filter
qui déclare les types mime que l'application peut gérer auprès des autres applications de l'appareil.
<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>
Comme le montre le balisage ci-dessus, un élément data
doit être ajouté pour chaque mime-type
déclaré dans le fichier JSON share_target
.
Conclusion
L'intégration de la cible de partage Web permet aux PWA d'une activité Web fiable d'être plus intégrées aux autres applications installées sur un appareil Android.
Comme décrit dans les étapes ci-dessus, le balisage supplémentaire nécessaire pour prendre en charge l'API dans une application Android existante qui utilise l'activité Web sécurisée est simplifié par android-browser-helper.
Consultez l'article sur les cibles de partage Web pour en savoir plus sur l'utilisation de l'API sur une PWA et l'API Web Share pour découvrir comment partager du contenu depuis une application Web progressive.
Dépannage
Mon application ne s'affiche pas comme option lorsque j'essaie de partager un fichier depuis une autre application.
Lorsque l'application ne s'affiche pas comme option, cela signifie que l'intent-filter
est incorrect. Vérifiez le balisage intent-filter
. Assurez-vous qu'il contient les actions, la catégorie et le mime-types
appropriés gérés par l'application.
Mon application s'affiche comme une option, la PWA est démarrée, mais les données ne sont pas partagées.
Plusieurs raisons peuvent expliquer ce problème. Voici une liste de points à vérifier:
- Assurez-vous que la validation de Digital Asset Links a réussi.
- Vérifiez que le fichier JSON dans strings.xml est correct.