【问题标题】:App Links `legacy_failure` verification error on Android 12Android 12 上的 App Links `legacy_failure` 验证错误
【发布时间】:2021-06-26 16:31:57
【问题描述】:

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

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

【问题讨论】:

  • 在 Android 12 Beta 3 上运行良好,甚至在将方案和主机放入一个数据标签时也是如此。也许您只是需要给请求一些时间来完成?
  • 由于 assertlink.json 文件中的包名称不同,我遇到了同样的问题。确保您的包名称与 assertlink.json 文件中的相同。

标签: android android-deep-link android-app-links


【解决方案1】:

事实证明,如果你打破了

<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 上也向后兼容,尽管文档没有明确说明。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    sha256_cert_fingerprints 的 debug & release keystore 不同。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      可以仅为自定义 uri 方案提供新的 intent-filter,在该方案中您autoVerify 标志设置为 true

      根据文档here,在运行以下命令时检查 logcat 以确认验证是否有效。

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

      查找术语IntentFilterIntentOp,它将说明验证成功或失败,即:

      I/IntentFilterIntentOp:验证 23 完成。成功:真。失败的主机:。 [上下文 service_id=244]

      如果无法验证一个或多个 intent-filter 定义,您可能会在 Logcat 中看到以下内容:

      “D/ProcessState: Binder ioctl to enable oneway spam detection failed: Invalid argument”并且没有提到IntentFilterIntentOp

      【讨论】:

        【解决方案4】:

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

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

        android:host="*.example.com"
        

        documentation 应该支持这一点

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

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

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

        如果主机是明确的:

        android:host="www.example.com"
        

        我没有这样的问题。

        【讨论】:

          猜你喜欢
          • 2022-01-03
          • 2021-03-16
          • 2018-02-20
          • 2021-06-16
          • 2018-04-03
          • 2022-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多