9

我已经设置assetlinks.jsonAndroidManifest.xml以便在所有早期版本的 Android 中验证所需的应用程序链接。但是,验证不再适用于 Android 12(当前为 Beta 2)。adb shell pm get-app-links <PACKAGE_NAME>返回legacy_failure

Android 12 中的 App Links 验证似乎有一些变化,但文档对于需要更改的内容以及更改是否向后兼容并不是很明确。

4

4 回答 4

13

事实证明,如果你打破

<data android:scheme="http" android:host="www.example.com" />

分成 2 个标签

<data android:scheme="http" />
<data android:host="www.example.com" />

在 中AndroidManifest.xml,应用链接将在 Android 12 上成功验证。此更改似乎也向后兼容旧版本的 Android,即使文档没有明确说明。

于 2021-06-26T16:36:20.947 回答
6

我遇到了同样的问题。

sha256_cert_fingerprints调试和发布密钥库是不同的。

如果您仅在 上注册释放指纹assetlinks.json,则验证不适用于调试版本。所以adb shell pm get-app-links <PACKAGE_NAME>返回legacy_failure.

如果您添加两个指纹(调试和发布),它将起作用assetlinks.json

于 2021-11-11T16:41:08.310 回答
1

除了详细说明需要的其他答案之外:

  • 确保您为sha256_cert_fingerprints正在测试的构建类型使用正确的值,注意这可能会因您使用的是调试版本还是发布版本而有所不同
  • 为您的定义使用单独schemehost数据标签条目intent-filter

确保您的intent-filterwithandroid:autoVerify="true"不包含任何自定义 uri 方案(即launch://myapp/screen)也很重要,因为这些可能导致验证程序失败。

intent-filter可以只为autoVerify标志设置为的自定义 uri 方案提供新的true

根据此处的文档,在运行以下命令时检查 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

于 2022-01-06T17:23:27.720 回答
0

在 Android 12 上测试,Jadent 提到的所有点都是有效的,但是破坏主机和方案中的数据声明并不重要。

我也在“主机”属性中使用了通配符

android:host="*.example.com"

这应该在文档中得到支持

但是,当我运行域验证过程时

adb shell pm verify-app-links --re-verify PACKAGE_NAME

我收到了 legacy_failure 错误 :( 即使根据需要将assetlinks.json 放置在根域中。

如果主机是明确的:

android:host="www.example.com"

我没有这样的问题。

于 2022-03-01T16:58:23.407 回答