Mit Web Share Target können PWAs geteilte Inhalte von anderen Apps empfangen, die auf auf dem Gerät. Diese Funktion kann z. B. von Anwendungen wie Bildeditoren genutzt werden, ein Bild von einer Kamera-App oder ein soziales Netzwerk empfangen, um ein Bild oder Video zum Teilen zu erhalten.
Ab Chrome 86 ist Web Share Target auch für Anwendungen verfügbar, die Vertrauenswürdige Webaktivitäten. Die PWA sollte sofort einsatzbereit sein, aber es sind einige Änderungen erforderlich, der Android-App.
In diesem Artikel wird davon ausgegangen, dass der Entwickler mit vertrauenswürdigen Webaktivitäten vertraut ist. Leser, die neu bei finden Sie im Integrationsleitfaden Informationen zur Technologie.
Eine umfassende Erläuterung der Implementierung von Web Share Target in einer PWA finden Sie außerhalb und für Entwickler finden Sie in diesem Artikel weitere Informationen.
Die Demo-App unter https://scrapbook-pwa.web.app/ wird als PWA dafür verwendet. Artikel und der zugehörige Quellcode ist auf GitHub verfügbar. Die Android-App basiert auf Demo zu grundlegenden vertrauenswürdigen Web-Aktivitäten
Web Share-Ziel zur Android-App hinzufügen
So ändern Sie eine vorhandene Anwendung, die auf einer vertrauenswürdigen Web-Aktivität basiert, um Web Share zu implementieren Ziel, Änderungen an drei verschiedenen Dateien sind erforderlich:
build.gradle-Datei
Die Bibliothek android-browser-helper wurde aktualisiert und unterstützt nun Web Share Target. Als die Anwendung auf eine Version 2.0.1 oder höher aktualisieren.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
Die Anwendung muss der vertrauenswürdigen Webaktivität die Details der unterstützten Freigabe mitteilen des Empfangs, z. B. welche URLs geöffnet werden sollen, welche Methode verwendet werden soll und welche MIME-Typen unterstützt werden.
Dies erfolgt über eine JSON-Datei, die der Trusted Web Activity mit einer String-Ressource zur Verfügung gestellt wird. Die
sind identisch mit dem Feld share_target
im Web Manifest und können
eine fast unveränderte Zeichenfolge innerhalb von strings.xml
mit zwei wichtigen Hinweisen:
- Der Wert des Aktionsattributs muss die vollständige URL, einschließlich des Ursprungs, sein.
- Doppelte Anführungszeichen müssen mit Escapezeichen versehen werden, sodass jedes
"
zu\"
wird.
So sieht der Abschnitt share_target
von https://scrapbook-pwa.web.app/manifest.json aus
wie:
{
...
"share_target": {
"action": "/_share-target",
"enctype": "multipart/form-data",
"method": "POST",
"params": {
"files": [{
"name": "media",
"accept": [
"audio/*",
"image/*",
"video/*"
]
}]
}
},
...
}
Das neue Zeichenfolgenelement sieht dann so aus:
<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
Am Android-Manifest sind ein paar Änderungen erforderlich. Zunächst müssen wir sicherstellen,
DelegationService
ist deklariert, exportiert und aktiviert.
Entwickler, die ihre App basierend auf der einfachen Demo erstellt haben, verfügen bereits über den Dienst. Das Markup muss im Anwendungs-Tag enthalten sein und so aussehen:
<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>
Schließlich müssen dem LauncherActivity-Aktivitäts-Tag zwei neue Elemente hinzugefügt werden:
– Ein meta-data
-Tag, das auf die in der Datei „strings.xml“ definierte JSON-Datei verweist.
– Ein intent-filter
, das angibt, welche MIME-Typen die Anwendung in anderen Fällen verarbeiten kann
Apps auf dem Gerät.
<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>
Wie im obigen Markup zu sehen ist, sollte für jedes deklarierte mime-type
ein data
-Element hinzugefügt werden.
im JSON-Format share_target
.
Fazit
Durch die Integration von Web Share Target können PWAs in einer vertrauenswürdigen Webaktivität die in andere auf einem Android-Gerät installierte Anwendungen integriert sind.
Wie in den obigen Schritten beschrieben, wurde das zusätzliche Markup, das zum Hinzufügen der Unterstützung für die API in einem bestehende Android-App, die vertrauenswürdige Webaktivitäten verwendet, durch „android-browser-helper“ vereinfacht.
Im Artikel zu Web Share Target finden Sie weitere Informationen zur Verwendung der API in einer PWA und im Web Share API, um zu erfahren, wie du Inhalte aus der progressiven Web-App teilen kannst.
Fehlerbehebung
Meine App wird nicht als Option angezeigt, wenn ich versuche, eine Datei aus einer anderen App freizugeben.
Wenn die App nicht als Option angezeigt wird, bedeutet dies, dass die intent-filter
falsch. Überprüfen Sie das intent-filter
-Markup und achten Sie darauf, dass es die richtigen Aktionen enthält.
Kategorie und mime-types
, die von der Anwendung verwaltet werden.
Meine App wird als Option angezeigt, die PWA wird gestartet, aber die Daten werden nicht freigegeben.
Dies kann verschiedene Ursachen haben. Dies ist eine Checkliste mit Dingen, die Sie berücksichtigen sollten:
- Prüfe, ob die Digital Asset Links-Validierung erfolgreich ist.
- Überprüfen Sie den JSON-Code in der Datei „strings.xml“ auf Richtigkeit.