android 中的 AppLinks(已验证深层链接)在从 Google Play 安装应用程序时不起作用

AppLinks(verified Deeplinks) in android does not work when app is installed from Google Play

我们在 AndroidManifest 中为深度 link 定义了一些 intent-filters。我们还将 assetlinks.json 文件放置在我们域中的正确位置,并带有正确的 SHA 指纹。我们面临一个奇怪的问题,当从 Android Studio 安装应用程序时,这些应用程序 link 直接打开我们的应用程序,中间没有任何选择器。

这也是我们想要的行为,但是,当我们将我们的应用程序上传到 Google 播放并从那里下载时,这些应用程序 link 首先打开 App chooser,这不是我们想要的行为。

我们做了一些实验,比如为两个不同的 link 创建不同的意图过滤器,删除一个 link 等,但这种行为保持不变。还仔细检查了 SHA 指纹,他们似乎没问题。

如果您说您的 assetlinks.json 文件位于正确的位置,并且 JSON 本身有正确的陈述。那么可以有两个问题

  1. 检查您是否在您的 AndroidManifest.xml 文件中添加了 autoVerify=true 用于您在其中定义了 intent 过滤器的 activity。

  2. 重新检查已签名的 apk 的 SHA256 以确认您使用正确的 SHA256 来签署您的 apk。您可以使用命令

  3. 检查
keytool -list -printcert -jarfile <your_signed.apk>

并验证您的 assetlinks.json 文件中是否存在相同的 SHA256

  • 要验证您的应用是否真正解析了您的应用 link,请使用命令
./adb shell dumpsys package domain-preferred-apps

输出如下:

Package: com.test.example
Domains: www.test.com
Status:  always : 200000000

Package: com.test.example
Domains: www.xyz.com
Status:  ask
.
.
.

找到你的应用程序的包名,然后检查 Status 你的包名,如果它是 always : <some_number> 那么你的 apk 被正确验证并且应用程序 link 应该可以正常工作,否则,如果 Status 的值为 askundefined,则存在一些问题,您可以按照上述步骤进行重构。

我知道有一个可以接受的答案,但还有其他人可能会像我一样面临另一种情况。

发布到 Google Play 时,如果您的应用有“App Signing by Google Play is enabled for this app.”,那么您的 keystore SHA256 是什么并不重要在本地计算机上签署 apk 时。

您需要使用 Google Play Console -> Relase management -> App signing -> App signing certificate.

中的 SHA256

编辑 (2021): App signing key certificate 现在在不同的位置:

  1. Select 来自控制台的应用程序。
  2. 转到发布部分。
  3. 设置下、select 应用完整性