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 應用程式中,android-browser-helper 可簡化在 API 中新增支援所需的額外標記。
請參閱「Web Share Target」文章,進一步瞭解如何在 PWA 上使用 API,以及如何透過漸進式網頁應用程式分享內容。Web Share API
疑難排解
嘗試透過其他應用程式分享檔案時,我的應用程式未顯示為選項。
如果應用程式未顯示為選項,表示 intent-filter
有誤。仔細檢查 intent-filter
標記,確保其包含應用程式處理的正確動作、類別和 mime-types
。
我的應用程式顯示為選項,PWA 已啟動,但資料未分享。
造成這種情況的原因有幾種。以下是檢查清單:
- 確認 Digital Asset Links 驗證是否成功。
- 檢查 strings.xml 中的 JSON 是否正確。