在受信任網路活動中啟用網路分享目標

Web Share Target 可讓 PWA 接收裝置上安裝的其他應用程式分享的內容。例如,圖片編輯器等應用程式可以使用這項功能,從相機應用程式接收圖片,或是從社群媒體接收圖片或影片以供分享。

自 Chrome 86 版起,使用Trusted Web Activity 的應用程式現在也能使用 Web Share Target。雖然 PWA 應可立即運作,但 Android 應用程式需要進行一些變更。

本文假設開發人員已熟悉「Trusted Web Activities」。如果您是新手,可以參閱整合指南

同樣地,在 PWA 中實作 Web Share Target 的完整說明不在本文討論範圍內,開發人員可以參閱這篇文章,進一步瞭解相關資訊。

本文章的 PWA 為 https://scrapbook-pwa.web.app/ 上的示範應用程式,其原始碼可在 GitHub 上取得,而 Android 應用程式則是以基本信任的網路活動示範為基礎。

在 Android 應用程式中新增 Web Share 目標

如要修改現有的 Trusted Web Activity 應用程式,以便導入 Web Share 目標,您必須修改三個不同的檔案:

build.gradle

android-browser-helper 程式庫已更新,支援 Web Share Target。首先,請更新應用程式,使用 2.0.1 以上版本。

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

res/strings.xml

應用程式需要向 Trusted Web Activity 告知其支援接收的分享內容詳細資料,例如要開啟哪些網址、要使用的方法,以及支援的 mime 類型。

這項操作會透過 JSON 完成,並透過字串資源提供給信任的網路活動。這些欄位與網頁資訊清單中的 share_target 欄位相同,且可幾乎不經修改地新增至 strings.xml 中的字串,但請注意以下兩點:

  1. action 屬性的值必須是完整網址,包括來源。
  2. 必須逸出雙引號,因此每個 " 都會變成 \"

以下是 https://scrapbook-pwa.web.app/manifest.jsonshare_target 部分:

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

新的字串元素會如下所示:

<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

您必須在 Android 資訊清單中進行幾項變更。首先,我們需要確保 DelegationService 已宣告、匯出及啟用。

根據基本示範建立應用程式的開發人員,已將服務納入其中,且標記應位於應用程式標記中,如下所示:

<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>

最後,您需要在 LauncherActivity 活動標記中新增兩個項目: - 參照 strings.xml 中定義的 JSON 的 meta-data 標記。- intent-filter:宣告應用程式可處理裝置上其他應用程式的哪些 mime 類型。

<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>

如上方標記所示,您應為 share_target JSON 中宣告的每個 mime-type 新增 data 元素。

結論

透過 Web Share Target 整合功能,可讓 Trusted Web Activity 中的 PWAs 與 Android 裝置上安裝的其他應用程式進行更深入的整合。

如上述步驟所述,在使用 Trusted Web Activity 的現有 Android 應用程式中,如果要新增對 API 的支援,就需要額外的標記,而 android-browser-helper 可簡化這項作業。

請參閱「Web Share Target」文章,進一步瞭解如何在 PWA 上使用 API,以及如何透過漸進式網頁應用程式分享內容。Web Share API

疑難排解

嘗試透過其他應用程式分享檔案時,我的應用程式未顯示為選項。

如果應用程式未顯示為選項,表示 intent-filter 有誤。仔細檢查 intent-filter 標記,確保其包含正確的動作、類別和應用程式處理的 mime-types

我的應用程式顯示為選項,PWA 已啟動,但系統未分享資料。

造成這個問題的原因有幾種。以下是檢查清單:

  • 確認 Digital Asset Links 驗證是否成功。
  • 檢查 strings.xml 中的 JSON 是否正確。