动态应用链接让您可以管理网络服务器上的特定规则,为您提供更大的灵活性,对深层链接有更强的掌控能力。这意味着,您无需发布应用的新版本,即可更改用户从网站网址重定向到应用的方式。详细了解动态应用链接。
本文介绍了如何实现动态应用链接。
本页内容
如何实现动态应用链接
实现动态应用链接涉及同时配置应用的清单和网站的 assetlinks.json 文件。请按以下步骤开始操作。
第 1 步(共 2 步):配置应用的清单
动态应用链接的最佳实践是在 AndroidManifest.xml 文件中声明尽可能广泛的范围,再使用 assetlinks.json 文件设置更具体的路由规则。这种做法为您带来极大的灵活性,方便您日后在服务器上添加或更改路径。
在清单中配置 intent 过滤器以处理网页链接并启用验证。
AndroidManifest.xml
<<activity
android:name=".MainActivity"
android:exported="true">
<!-- 确保您明确将 android:autoVerify 设置为“true”。-->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <!-- 同时包含“http”和“https”协议以进行验证。-->
<data android:scheme="http" />
<data android:scheme="https" /> <!-- 包含一个或多个应验证的域名。-->
<!-- 使用通配符 (*) 来支持多个子域名。-->
<data android:host="www.example.com" />
<data android:host="*.example.com" />
</intent-filter>
</activity>注意:
android:autoVerify="true":此属性必须设置,用于指示系统验证应用与您指定的域名之间的关联。<data android:scheme...>:您必须同时包含http和https,intent 过滤器才能符合验证条件。<data android:host...>:列出您的应用应处理的所有域名。您可以使用通配符 (*.example.com) 来匹配所有子域名。
第 2 步(共 2 步):配置网站的 assetlinks.json 文件
在您的网络服务器上创建或更新 assetlinks.json 文件,以声明与应用的关联并指定动态路由规则。
发布要求:
- 该文件必须可通过
https://<your-domain>/.well-known/assetlinks.json访问。 - 必须通过 HTTPS 提供服务,且不经过任何重定向。
- 必须与
Content-Type: application/json标头一起提供。 - 您必须在要支持的每个网域上托管单独的文件。
assetlinks.json
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["..."]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"/": "/products/*"},
{"/": "/shoes", "?": {"in_app": "true"}},
{"/": "/legacy/*", "exclude": true},
{"/": "*", "?": {"no_dl": "*"}},
{"#": "app"}
]
}
}
}
]注意:
package_name:必须与应用build.gradle文件中的applicationId一致。sha256_cert_fingerprints:应用签名证书的 SHA-256 指纹。- 重要提示:如果您使用 Play 应用签名,则必须从 Google Play 管理中心的发布版本> 设置> 应用签名下获取此值。由本地
keytool命令生成的指纹将无法匹配。
- 重要提示:如果您使用 Play 应用签名,则必须从 Google Play 管理中心的发布版本> 设置> 应用签名下获取此值。由本地
dynamic_app_link_components:这是一个 JSON 对象数组,您可以在其中指定规则。每个对象都可以为路径 (/)、查询 (?) 和 fragment (#) 指定条件,以及exclude标志。- 格式有误的字段:如果系统在
dynamic_app_link_components数组中检测到任何格式有误的字段,它将舍弃所有动态规则,并回退到清单中指定的规则。
如何测试深层链接路由并验证网站关联
完成实现后,需同时测试应用的路由逻辑和域名验证流程。
第 1 步(共 2 步):测试深层链接路由
使用 Android 调试桥 (ADB) 来模拟深层链接 intent,并验证您的应用是否会打开并跳转到正确的页面。此测试不会验证网站关联。
$ adb shell am start \
-W -a android.intent.action.VIEW \
-d "https://www.example.com/products/123" com.example.app第 2 步(共 2 步):测试应用链接验证
请按以下步骤操作,测试系统是否已正确验证您的网站关联。
- 验证
assetlinks.json 文件:使用 Digital Asset Links API 确保您的 JSON 文件格式正确且可访问。在浏览器中打开以下网址,并将www.example.com替换为您的域名:https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls - 重置设备上的应用链接状态:为确保测试环境清洁,请重置应用当前的应用链接状态。
$ adb shell pm set-app-links --package com.example.app 0 all- 强制系统重新验证:此命令会告知系统立即提取
assetlinks.json文件并运行验证流程
$ adb shell pm verify-app-links --re-verify com.example.app- 查看验证结果:等待片刻,然后运行以下命令查看结果。
$ adb shell pm get-app-links com.example.app- 确认域名验证状态为
verified:其他状态(例如denied或legacy_failure)表示存在问题。
相关链接
本页面可能包含使用 AI 技术翻译的内容。AI 翻译未必准确无误。