「網路分享目標」可讓 PWA 接收裝置上安裝的其他應用程式共用內容。例如圖片編輯器等應用程式可接收相機應用程式的圖片,或是社交網路用於接收要分享的圖片或影片。
從 Chrome 86 版開始,採用受信任網路活動的應用程式也能使用網路分享目標。雖然 PWA 應該立即可用,但 Android 應用程式需要進行一些變更。
本文假設開發人員熟悉 Trusted Web Activities。剛接觸技術的讀者請參閱「整合指南」。
上述程式碼也將完整說明 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 完成,並提供字串資源給「Trusted Web Activity」使用。這些欄位與網路資訊清單中提供的 share_target
欄位相同,且可照原樣加進 strings.xml
內的字串,但有兩則重要注意事項:
- 動作屬性的值必須為完整網址,包括來源。
- 必須逸出雙引號,因此每個
"
都會變為\"
。
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
元素。
結語
「網路分享目標」整合功能可讓信任網路活動中的 PWA,與 Android 裝置上安裝的其他應用程式進一步整合。
如上述步驟所述,在使用「Trusted Web Activity」的既有 Android 應用程式中,新增 API 支援功能所需的額外標記,由 android-browser-helper 簡化。
請參閱網頁分享目標一文,進一步瞭解如何在 PWA 上使用 API 和 Web Share API,瞭解如何透過漸進式網頁應用程式共用內容。
疑難排解
當我嘗試透過其他應用程式分享檔案時,應用程式並未顯示這個選項。
如果應用程式未顯示為選項,表示 intent-filter
不正確。仔細檢查 intent-filter
標記,確認其中包含應用程式處理的正確動作、類別和 mime-types
。
我的應用程式顯示為選項,PWA 已啟動,但資料不會分享。
造成這種情況的原因如下:請參考以下檢查清單:
- 確認 Digital Asset Links 驗證成功。
- 請檢查 string.xml 中的 JSON 是否正確無誤。