Web Share Target 可让 PWA 接收来自安装在 。例如,图片编辑器等应用可使用此功能 从相机应用或社交网络接收图片,进而接收要分享的图片或视频。
从 Chrome 86 开始,Web Share Target 现在也适用于 Trusted Web Activity。虽然 PWA 应该可以开箱即用,但您需要进行一些更改 Android 应用。
本文假设开发者熟悉 Trusted Web Activity。初次接触的读者 该技术可以从集成指南开始。
同理,关于 PWA 中网络共享目标实现的完整说明,请参见 范围。开发者可以参阅这篇文章,了解更多信息。
https://scrapbook-pwa.web.app/ 上的演示应用将用作本次测试的 PWA GitHub 上提供了其源代码,并且 Android 应用基于 基本 Trusted Web Activity 演示。
将 Web Share Target 添加到 Android 应用
为了修改基于 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 完成,该 JSON 可通过字符串资源提供给 Trusted Web Activity。通过
字段与网络清单中提供的 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
。
基于基本演示构建应用的开发者已经可以使用该服务 且标记应位于 application 标记内,如下所示:
<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 activity 标记中:
- 一个 meta-data
标记,用于引用 strings.xml 中定义的 JSON。
- 一个 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 中。
总结
Web Share Target 集成可让 Trusted Web Activity 内的 PWA 更深入地进行 与安装在 Android 设备上的其他应用集成的应用。
如上面的步骤所述,要在 android-browser-helper 简化了使用 Trusted Web Activity 的现有 Android 应用。
请参阅“网络共享目标”一文,详细了解如何在 PWA 上使用 API 以及 Web Share API,了解如何通过 Progressive Web App 分享内容。
问题排查
当我尝试分享其他应用的文件时,我的应用未显示为选项。
如果应用未显示为选项,则表示 intent-filter
错误。仔细检查 intent-filter
标记,确保它包含正确的操作,
类别,以及由应用处理的 mime-types
。
我的应用显示为一个选项,PWA 已启动,但未共享数据。
导致这种情况的原因有以下几种。以下是需要考虑的事项:
- 确保 Digital Asset Links 验证成功。
- 检查 strings.xml 内的 JSON 是否正确。