Mar*_*Lan 17 android android-deep-link android-app-links
我已进行设置assetlinks.json,AndroidManifest.xml以便在所有以前版本的 Android 中验证所需的应用程序链接。但是,该验证在 Android 12(当前为 Beta 2)中不再起作用。adb shell pm get-app-links <PACKAGE_NAME>返回legacy_failure。
Android 12 中的 App Links 验证似乎有一些更改,但文档并没有非常明确地说明需要更改哪些内容以及更改是否向后兼容。
Mar*_*Lan 30
事实证明,如果你打破了
<data android:scheme="http" android:host="www.example.com" />
Run Code Online (Sandbox Code Playgroud)
分成2个标签
<data android:scheme="http" />
<data android:host="www.example.com" />
Run Code Online (Sandbox Code Playgroud)
在 中AndroidManifest.xml,应用程序链接将在 Android 12 上成功验证。此更改似乎也向后兼容旧版本的 Android,尽管文档没有明确说明。
小智 14
我遇到了同样的问题。
sha256_cert_fingerprints调试和发布密钥库是不同的。
如果您仅在 上注册发布指纹assetlinks.json,则验证在调试版本上不起作用。所以adb shell pm get-app-links <PACKAGE_NAME>返回legacy_failure.
如果您添加两个指纹(调试和发布),它将起作用assetlinks.json
除了详细说明需要的其他答案之外:
sha256_cert_fingerprints确保您为正在测试的构建类型使用正确的值,请注意,这可能会根据您使用的是调试还是发布构建而有所不同scheme数据host标签条目进行intent-filter定义确保您的intent-filterwithandroid:autoVerify="true"不包含任何自定义 uri 方案(即launch://myapp/screen)也很重要,因为这些方案可能会导致验证程序失败。
可以仅为您未将标志设置intent-filter为 的自定义 uri 方案提供新的。autoVerifytrue
按照此处的文档,在运行以下命令时检查 logcat 以确认验证是否正常工作。
adb shell pm verify-app-links --re-verify <PACKAGE_NAME>
IntentFilterIntentOp查找说明验证成功或失败的术语,即:
I/IntentFilterIntentOp:验证23完成。成功:正确。失败的主机:。[上下文 service_id=244 ]
intent-filter如果无法验证一个或多个定义,您可能会在 Logcat 中看到以下内容:
“D/ProcessState:启用单向垃圾邮件检测的 Binder ioctl 失败:参数无效”并且没有提及
IntentFilterIntentOp
小智 5
发生了什么变化?
从 Android 12 开始,他们引入了一种检查支持的 Web 域的新方法。
较低版本的android保持不变。
Android 12 中的验证如何进行?
安装应用程序时,android 会向意图链接内的域发送异步请求,以检查 .well-known/assetlinks.json 是否存在且有效。
如何生成assetlinks.json?
我建议使用谷歌提供的这个工具来生成该文件。它还可以检查 assetlinks.json 是否存在且设置正确。生成器: https: //developers.google.com/digital-asset-links/tools/generator
从哪里获取 SHA-256 表格?
生成 .json 文件后,将其放入域的根目录 (.well-known/assetlinks.json)。我建议手动打开它以确保安全。 https://my.domain.com/.well-known/assetlinks.json
在应用程序中设置 Intent 链接
到您的 AndroidManifest.xml 添加
<!-- Make sure you have explicitly set 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>
Run Code Online (Sandbox Code Playgroud)
手动测试意图链接是否有效:
您可以在模拟器运行时运行此命令,它应该打开应用程序:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
Run Code Online (Sandbox Code Playgroud)
手动测试意图链接
支持更新的域名验证流程
adb shell am compat 启用 175408749 PACKAGE_NAME
重置设备上 Android 应用程序链接的状态
adb shell pm set-app-links --package PACKAGE_NAME 0 全部
adb shell pm verify-app-links --重新验证 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
Run Code Online (Sandbox Code Playgroud)
之后您就可以开始了,您的意图链接将在 Android 12 及更低版本上运行。
最终测试检查您是否已正确设置所有内容 运行:
adb shell am start -W -a android.intent.action.VIEW -d "https://my.domain.com/test?code=abcde"
Run Code Online (Sandbox Code Playgroud)
来源: https: //developer.android.com/training/app-links/verify-site-associations
| 归档时间: |
|
| 查看次数: |
17128 次 |
| 最近记录: |