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

網路分享目標:可讓 PWA 接收其他已安裝應用程式的共用內容 裝置。舉例來說,圖片編輯器等應用程式 從相機應用程式或社群網路接收圖像或影片,以便分享圖像或影片。

從 Chrome 第 86 版開始,網路共用目標現在也支援使用 受信任的網路活動。雖然 PWA 應該立即可用,但還是需要進行一些變更 Android 應用程式

本文假設開發人員已熟悉「受信任的網路活動」,剛接觸的讀者 技術可透過整合指南開始進行。

同樣行,對於在 PWA 中實作網路分享目標的詳細說明, 範圍及開發人員,請參閱這篇文章瞭解詳情。

系統將使用 https://scrapbook-pwa.web.app/ 的試用版應用程式做為此應用程式的 PWA 文章及其原始碼可在 GitHub 取得,而 Android 應用程式是以 「信任的網路活動」基本示範

將網路共用目標新增至 Android 應用程式

如要修改以 Trusted Web Activity 為基礎的現有應用程式以實作網路分享功能 您必須指定、修改三個不同的檔案:

build.gradle

android-browser-helper 程式庫已更新,開始支援網路分享目標。身為 請先更新應用程式,使其使用高於或等於 2.0.1 的版本。

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

res/strings.xml

應用程式需要向「信任的網路活動」告知其支援的共用詳情 接收資料,例如要開啟的網址、使用的方法以及支援的 MIME 類型。

方法是透過 JSON,其中包含字串資源的受信任網路活動。 欄位與網路資訊清單提供的 share_target 欄位相同,可以新增到 是 strings.xml 中的字串,幾乎保持原樣,但有兩點重要事項:

  1. 動作屬性的值必須是完整網址,包括來源。
  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 活動標記中加入兩個新項目: - 參照 string.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>

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

結論

網站分享目標整合功能可讓受信任網路活動中的 PWA 更深入 與 Android 裝置上安裝的其他應用程式進行整合。

如上述步驟所述,在 現有的 Android 應用程式也運用「受信任的網路活動」,現在 android-browser-helper 能簡化相關作業。

請參閱網路分享目標文章,進一步瞭解如何在 PWA 和 請參閱 Web Share API,瞭解如何分享 Progressive Web App 的內容。

疑難排解

嘗試從其他應用程式分享檔案時,我的應用程式沒有顯示選項。

如果應用程式未顯示為選項,表示 intent-filter 不正確。請仔細檢查 intent-filter 標記,並確認其中含有正確的動作。 類別和 mime-types,均由應用程式處理

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

有幾個原因可能會造成這個情況。此時,請務必檢查清單:

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