Web Share Target in Trusted Web Activity aktivieren

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

Vorhandene Anwendung auf der Grundlage von vertrauenswürdigen Web-Aktivitäten für die Implementierung von Web Share ändern Ziel, Änderungen an drei verschiedenen Dateien sind erforderlich:

build.gradle

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 -Empfang, 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:

  1. Der Wert des Aktionsattributs muss die vollständige URL, einschließlich des Ursprungs, sein.
  2. 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, haben den Dienst bereits 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. in der share_target-JSON-Datei.

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 Schritten oben 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 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.
  • Prüfen Sie den JSON-Code in der Datei „strings.xml“ auf Richtigkeit.