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
中的字串,但請注意以下兩點:
- action 屬性的值必須是完整網址,包括來源。
- 必須逸出雙引號,因此每個
"
都會變成\"
。
以下是 https://scrapbook-pwa.web.app/manifest.json 的 share_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 是否正確。