0

我正在根据各种指南协议设置我的 Android 应用程序以使用 HTTP Web 链接,并已成功设置深度链接,其中包括从/.well-known/assetlinks.json. 一切都按预期工作。从操作的角度来看,我正在努力解决的是如何维护这个文件——特别是在更新和失败的情况下。

假设我有现有客户已经下载了我的应用程序并且可以正常使用网络链接。我更新了我的资产链接文件并将新版本推送到我的服务器。我的客户何时获得更新的资产链接文件?操作系统是否配置为在某些节奏或应用启动时检查更新?是否仅在应用程序更新或重新安装时?

同样,假设我的网站已关闭。新用户正在安装我的应用程序,操作系统将无法关联我的域,并且当客户单击 HTTP 网络链接时,他们不会被深度链接到应用程序。这是有道理的。但是在我从中断中恢复之后,考虑到应用程序已经安装,客户什么时候可以获得他们的资产链接文件?

同样,假设我上传了一个无效的assetlinks.json 文件。这是否会破坏在首次安装应用程序时已经具有有效关联的现有客户的当前 Web 链接?

了解这些问题最终将帮助我更好地解决客户问题并调整我应该期望从我的服务器上看到我的资产链接文件的预期流量。

4

1 回答 1

1

让我试着简单地介绍一下应用链接的工作原理。我列出了我在玩应用程序链接时收集到的所有东西。还附上了一篇非常好的文章,其中详细介绍了以下内容。

注册和更新应用程序链接有两个关键组件:Package managerIntent Filter Verifier. 这些是工作流运行的通常步骤:

  1. 每次通过包管理器安装或更新应用程序时, INTENT_FILTER_NEEDS_VERIFICATION都会生成一个名为的意图。

  2. Intent Filter Verifier查找在应用清单中定义的标签中指定的域。

  3. 对于为应用程序指定的每个域/主机名,IntentFilterVerfier 尝试使用 API 调用为每个域获取语句。

  4. 根据 API 调用的结果,域/主机名被分类到以下存储桶之一

    undefined — apps which do not have link auto-verification enabled in their manifest
    ask — apps which have failed verification (i.e. ask the user via the "Open with" dialog)
    always — apps which have passed verification (i.e. always open this app for these domains)
    never — apps which have passed verification, but have been disabled in the system settings
    
  5. 包管理器更新并应用该行为。

故障处理

  • 如果任何域的 fetch 语句返回无效响应,它将影响您现有的所有应用程序链接。

  • 如果由于连接而导致获取语句失败,Android 将重试获取语句。尽管文档中没有提到重试策略是什么,但我们可以放心地假设它是通过 JobScheduler 完成的,并且将是线性重试。

  • 如果您计划对域属性进行更改,则需要Cache-Control在语句 JSON 中返回一个键。

您可以在Christopher Orr撰写的这篇写得非常好的博客中获得更多信息和调试工作流程

于 2021-11-01T17:08:05.823 回答