Web Share Target in Trusted Web Activity aktivieren

Bandarra
André Cipriani Bandarra

Mit Web Share Target (Webfreigabeziel) können PWAs freigegebene Inhalte von anderen auf dem Gerät installierten Anwendungen empfangen. Diese Funktion kann beispielsweise von Anwendungen wie Bildeditoren verwendet werden, um ein Bild von einer Kamera-App zu empfangen, oder von sozialen Netzwerken, um ein Bild oder Video zum Teilen zu empfangen.

Ab Chrome 86 ist Web Share Target auch für Anwendungen verfügbar, die Trusted Web Activity (Vertrauenswürdige Webaktivitäten) nutzen. Die PWA sollte sofort einsatzbereit sein, es sind jedoch ein paar Änderungen an der Android-Anwendung erforderlich.

In diesem Artikel wird davon ausgegangen, dass der Entwickler mit vertrauenswürdigen Webaktivitäten vertraut ist. Leser, die die Technologie noch nicht kennen, erhalten im Integrationsleitfaden weitere Informationen.

Eine vollständige Erläuterung der Implementierung von Web Share-Zielen in einer PWA ist ebenfalls nicht vorgesehen. Entwickler finden in diesem Artikel weitere Informationen.

Die Demoanwendung unter https://scrapbook-pwa.web.app/ wird als PWA für diesen Artikel verwendet. Der Quellcode ist auf GitHub verfügbar. Die Android-Anwendung basiert auf der grundlegenden Demo für vertrauenswürdige Webaktivitäten.

Web Share Target zur Android-App hinzufügen

Um eine bestehende Anwendung, die auf einer vertrauenswürdigen Webaktivität basiert, für die Implementierung von Web Share Target zu ändern, sind Änderungen an drei verschiedenen Dateien erforderlich:

build.gradle

Die Bibliothek android-browser-helper wurde aktualisiert und unterstützt jetzt Web Share Target. Aktualisieren Sie zuerst die Anwendung auf eine Version, die höher oder gleich 2.0.1 ist.

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}

res/strings.xml

Die Anwendung muss der Trusted Web Activity Details zu der Freigabe mitteilen, die sie empfangen kann, 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 vertrauenswürdigen Webaktivität mit einer String-Ressource zur Verfügung gestellt wird. Die Felder sind dieselben wie das Feld share_target im Web Manifest und können fast unverändert zu einem String in strings.xml hinzugefügt werden. Dabei sind zwei wichtige Hinweise zu beachten:

  1. Der Wert des Aktionsattributs muss die vollständige URL einschließlich des Ursprungs sein.
  2. Doppelte Anführungszeichen müssen maskiert werden, sodass jedes " zu \" wird.

So sieht der Abschnitt share_target von https://scrapbook-pwa.web.app/manifest.json aus:

{
  ...
  "share_target": {
    "action": "/_share-target",
    "enctype": "multipart/form-data",
    "method": "POST",
    "params": {
      "files": [{
        "name": "media",
        "accept": [
          "audio/*",
          "image/*",
          "video/*"
        ]
      }]
    }
  },
  ...
}

Und das neue String-Element sieht 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 einige Änderungen erforderlich. Zuerst müssen wir dafür sorgen, dass DelegationService deklariert, exportiert und aktiviert ist.

Für Entwickler, die ihre App basierend auf der einfachen Demo erstellt haben, ist der Dienst bereits enthalten. Das Markup sollte sich innerhalb des Anwendungs-Tags befinden 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 für andere Apps auf dem Gerät verarbeiten kann.

<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 Markup oben zu sehen ist, sollte für jeden im share_target-JSON deklarierten mime-type ein data-Element hinzugefügt werden.

Fazit

Durch die Einbindung von Web Share-Zielen können PWAs in einer vertrauenswürdigen Webaktivität stärker in andere Anwendungen eingebunden werden, die auf einem Android-Gerät installiert sind.

Wie oben beschrieben, wird das zusätzliche Markup, das zum Hinzufügen der Unterstützung für die API in einer vorhandenen Android-App, die Trusted Web Activity verwendet, durch android-browser-helper vereinfacht.

Weitere Informationen zur Verwendung der API für eine PWA und der Web Share API für Inhalte aus der progressiven Web-App findest du im Artikel „Web Share Target“.

Fehlerbehebung

Meine Anwendung wird nicht als Option angezeigt, wenn ich versuche, eine Datei aus einer anderen Anwendung freizugeben.

Wenn die Anwendung nicht als Option angezeigt wird, ist intent-filter falsch. Prüfen Sie noch einmal, ob das intent-filter-Markup die richtigen Aktionen, die richtige Kategorie und die richtigen mime-types enthält, die von der Anwendung verarbeitet werden.

Meine App wird als Option angezeigt. Die PWA wurde gestartet, aber die Daten werden nicht freigegeben.

Dies kann verschiedene Ursachen haben. Dies ist eine Checkliste mit Dingen, die du beachten solltest:

  • Prüfen Sie, ob die Digital Asset Links-Validierung erfolgreich war.
  • Prüfen Sie den JSON-Code in der Datei „strings.xml“ auf Richtigkeit.