如何在 android 12 及更高版本上验证 android 应用链接?
How to verify android app links on android 12 and higher?
问题是在 android 12 或更高版本中打开超过 link 的应用程序。
在较低版本的 android 上一切正常。
当我查看“应用信息”->“默认打开”屏幕时。我看到未批准 links.
当我在支持的网址中打开 link 作为批准时,通过 link 打开应用程序就可以了。
我在 android 文档中阅读了有关验证 Intent 过滤器的内容,我认为一切正常。
https://developer.android.com/training/app-links/verify-site-associations#add-intent-filters
已将 .well-known/assetlinks.json 添加到我的域
https://my.domain.net/.well-known/assetlinks.json
.well-known/assetlinks.json 的内容(用 https://developers.google.com/digital-asset-links/tools/generator 生成并检查)
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "my.package.name",
"sha256_cert_fingerprints": ["SHA_256"] }
}]
三重检查我使用的 SHA_256.
是否正确
还测试了 .json 是否适用于“语句列表生成器和测试器”,link 上面提到的。
内部的 Intent 过滤器 AndroidManifest.xml
<intent-filter
android:autoVerify="true"
android:label="@string/login_to_app">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="my.domain.net"
android:pathPrefix="/${dynamicVar}/our/application/"
android:scheme="https" />
</intent-filter>
我还上传了应用程序到 play store 以确保这不是 SHA 证书或 play store 相关的问题,但没有区别。
我也检查了我的应用程序包名称,内部测试和调试都是正确的。
为了确保安全,我也采用了添加每个应用程序包名称组合的方式。
很快:
由于不支持的网址,无法通过 link 在 android 12 及更高版本上打开应用程序。
我知道 links 需要用 .well-known/assetlinks.json 验证
当我手动检查支持的网址时,它工作得很好,但这不是最终的解决方案。
我不知道我在这里遗漏了什么。
有人知道我在这里做错了什么吗?
发生了什么变化?
从 Android12 开始,他们引入了一种检查支持的 Web 域的新方法。
android 的低版本保持不变。
android12 中的验证如何工作?
安装应用程序时 android 向意图 links 内的域发送异步请求以检查 .well-known/assetlinks.json 是否存在且有效。
如何生成assetlinks.json?
我推荐使用此工具 google 用于生成该文件。
它还可以检查 assetlinks.json 是否存在并正确设置。
生成器:https://developers.google.com/digital-asset-links/tools/generator
从哪里获取 SHA-256 表?
- 打开Android工作室
- 打开您的项目
- 单击 Gradle(在右侧面板中,您将看到 Gradle 栏)
- 点击刷新(从Gradle栏点击刷新,你会看到列表
- Gradle 个项目的脚本)
- 单击您的项目(您的项目名称表单列表(根目录))
- 点击任务
- 点击Android
- 双击 signingReport(您将在 运行 中获得 SHA1 和 MD5
栏(有时会在 Gradle 控制台))
- Select 应用模块从模块选择下拉列表到 运行 或调试您的应用程序
生成 .json 文件后,将其放入域的根目录 (.well-known/assetlinks.json)。
我建议手动打开它以确保安全。
https://my.domain.com/.well-known/assetlinks.json
在应用程序中设置 Intent links
给你AndroidManifest.xml加
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data
android:scheme="https"
android:host="**my.domain.com**"
android:pathPrefix="/test" />
</intent-filter>
手动测试 intent link 是否有效:
您可以 运行 使用您的模拟器 运行ning 执行此命令,它应该会打开应用程序:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
手动测试意图link
- 支持更新的域验证过程
adb shell am compat enable 175408749 PACKAGE_NAME
- 重置设备上 Android 应用链接的状态
adb shell pm set-app-links --package PACKAGE_NAME 0 all
- 调用域验证过程
adb shell pm verify-app-links --re-verify PACKAGE_NAME
运行执行此命令后,请务必等待至少一分钟让应用验证您的域。
- 查看验证结果
adb shell pm get-app-links PACKAGE_NAME
此命令的输出类似于以下内容:
com.example.pkg:
ID: 01234567-89ab-cdef-0123-456789abcdef
Signatures: [***]
Domain verification state:
my.domain.com: verified
sub.example.com: legacy_failure
example.net: verified
example.org: 1026
在那之后你就可以开始了,你的意图 links 将在 android 12 及更低版本上工作。
最终测试以检查您是否已正确设置所有内容
运行:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
来源:https://developer.android.com/training/app-links/verify-site-associations
问题是在 android 12 或更高版本中打开超过 link 的应用程序。
在较低版本的 android 上一切正常。
当我查看“应用信息”->“默认打开”屏幕时。我看到未批准 links.
当我在支持的网址中打开 link 作为批准时,通过 link 打开应用程序就可以了。
我在 android 文档中阅读了有关验证 Intent 过滤器的内容,我认为一切正常。
https://developer.android.com/training/app-links/verify-site-associations#add-intent-filters
已将 .well-known/assetlinks.json 添加到我的域 https://my.domain.net/.well-known/assetlinks.json .well-known/assetlinks.json 的内容(用 https://developers.google.com/digital-asset-links/tools/generator 生成并检查)
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "my.package.name",
"sha256_cert_fingerprints": ["SHA_256"] }
}]
三重检查我使用的 SHA_256.
是否正确还测试了 .json 是否适用于“语句列表生成器和测试器”,link 上面提到的。
内部的 Intent 过滤器 AndroidManifest.xml
<intent-filter
android:autoVerify="true"
android:label="@string/login_to_app">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="my.domain.net"
android:pathPrefix="/${dynamicVar}/our/application/"
android:scheme="https" />
</intent-filter>
我还上传了应用程序到 play store 以确保这不是 SHA 证书或 play store 相关的问题,但没有区别。
我也检查了我的应用程序包名称,内部测试和调试都是正确的。
为了确保安全,我也采用了添加每个应用程序包名称组合的方式。
很快: 由于不支持的网址,无法通过 link 在 android 12 及更高版本上打开应用程序。
我知道 links 需要用 .well-known/assetlinks.json 验证 当我手动检查支持的网址时,它工作得很好,但这不是最终的解决方案。
我不知道我在这里遗漏了什么。
有人知道我在这里做错了什么吗?
发生了什么变化?
从 Android12 开始,他们引入了一种检查支持的 Web 域的新方法。
android 的低版本保持不变。
android12 中的验证如何工作?
安装应用程序时 android 向意图 links 内的域发送异步请求以检查 .well-known/assetlinks.json 是否存在且有效。
如何生成assetlinks.json?
我推荐使用此工具 google 用于生成该文件。
它还可以检查 assetlinks.json 是否存在并正确设置。
生成器:https://developers.google.com/digital-asset-links/tools/generator
从哪里获取 SHA-256 表?
- 打开Android工作室
- 打开您的项目
- 单击 Gradle(在右侧面板中,您将看到 Gradle 栏)
- 点击刷新(从Gradle栏点击刷新,你会看到列表
- Gradle 个项目的脚本)
- 单击您的项目(您的项目名称表单列表(根目录))
- 点击任务
- 点击Android
- 双击 signingReport(您将在 运行 中获得 SHA1 和 MD5 栏(有时会在 Gradle 控制台))
- Select 应用模块从模块选择下拉列表到 运行 或调试您的应用程序
生成 .json 文件后,将其放入域的根目录 (.well-known/assetlinks.json)。
我建议手动打开它以确保安全。
https://my.domain.com/.well-known/assetlinks.json
在应用程序中设置 Intent links
给你AndroidManifest.xml加
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data
android:scheme="https"
android:host="**my.domain.com**"
android:pathPrefix="/test" />
</intent-filter>
手动测试 intent link 是否有效:
您可以 运行 使用您的模拟器 运行ning 执行此命令,它应该会打开应用程序:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
手动测试意图link
- 支持更新的域验证过程
adb shell am compat enable 175408749 PACKAGE_NAME
- 重置设备上 Android 应用链接的状态
adb shell pm set-app-links --package PACKAGE_NAME 0 all
- 调用域验证过程
adb shell pm verify-app-links --re-verify PACKAGE_NAME
运行执行此命令后,请务必等待至少一分钟让应用验证您的域。
- 查看验证结果
adb shell pm get-app-links PACKAGE_NAME
此命令的输出类似于以下内容:
com.example.pkg:
ID: 01234567-89ab-cdef-0123-456789abcdef
Signatures: [***]
Domain verification state:
my.domain.com: verified
sub.example.com: legacy_failure
example.net: verified
example.org: 1026
在那之后你就可以开始了,你的意图 links 将在 android 12 及更低版本上工作。
最终测试以检查您是否已正确设置所有内容
运行:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
来源:https://developer.android.com/training/app-links/verify-site-associations