Web Share Target 可讓 PWA 接收裝置上其他應用程式分享的內容。舉例來說,圖片編輯器等應用程式可以使用這項功能,從相機應用程式接收圖片;社群網路則可接收圖片或影片以供分享。
自 Chrome 86 版起,使用 Trusted Web Activity 的應用程式也能使用 Web Share Target。雖然 PWA 應該可以立即運作,但仍需對 Android 應用程式進行一些變更。
本文假設開發人員已熟悉 Trusted Web Activities。如果讀者不熟悉這項技術,可以先參閱整合指南。
同樣地,本文不提供 PWA 中 Web Share Target 實作的完整說明,開發人員可參閱這篇文章瞭解詳情。
本文將使用 https://scrapbook-pwa.web.app/ 的示範應用程式做為 PWA,其原始碼可在 GitHub 上取得,而 Android 應用程式則是以基本的 Trusted Web Activity 示範應用程式為基礎。
在 Android 應用程式中新增 Web Share Target
如要修改現有的受信任的網路活動應用程式,以導入 Web Share Target,必須修改三個不同的檔案:
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 進行,並以字串資源的形式提供給信任的網路活動。這些欄位與 Web 應用程式資訊清單中的 share_target 欄位相同,可新增至 strings.xml 內的字串,幾乎與原始欄位相同,但有兩項重要注意事項:
- 動作屬性的值必須是完整網址,包括來源。
- 雙引號必須逸出,因此每個
"都會變成\"。
https://googlechrome.github.io/samples/scrapbook-pwa/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 中的 PWA 就能與 Android 裝置上安裝的其他應用程式更深入整合。
如上述步驟所述,android-browser-helper 可簡化額外標記,方便您在現有的 Android 應用程式中新增 API 支援功能,該應用程式使用 Trusted Web Activity。
請參閱這篇文章,進一步瞭解如何在 PWA 中使用 API,以及如何透過 Web Share API 分享漸進式網頁應用程式的內容。
疑難排解
從其他應用程式分享檔案時,我的應用程式未顯示為選項。
如果應用程式未顯示為選項,表示 intent-filter 不正確。請仔細檢查 intent-filter 標記,確保其中包含正確的動作、類別,以及應用程式處理的 mime-types。
我的應用程式會顯示為選項,PWA 也已啟動,但資料未共用。
造成這種情況的原因有幾種,以下是檢查清單:
- 確認 Digital Asset Links 驗證成功。
- 檢查 strings.xml 中的 JSON 是否正確。