AssetLinks 文件预期流量和故障场景
Posted
技术标签:
【中文标题】AssetLinks 文件预期流量和故障场景【英文标题】:AssetLinks file expected traffic and failure scenarios 【发布时间】:2021-12-13 02:01:29 【问题描述】:我正在根据各种 guides 和 protocols 设置我的 android 应用程序以使用 HTTP Web 链接,并已成功设置深度链接,其中包括从 /.well-known/assetlinks.json
提供我的资产链接文件。一切都按预期工作。从操作的角度来看,我正在努力解决的是如何维护这个文件——特别是在更新和失败的情况下。
假设我的现有客户已经下载了我的应用并且可以正常使用网络链接。我更新了我的资产链接文件并将新版本推送到我的服务器。我的客户何时获得更新的资产链接文件?操作系统是否配置为在某些节奏或应用启动时检查更新?是否仅在应用更新或重新安装时?
同样,假设我的网站已关闭。新用户正在安装我的应用程序,操作系统将无法关联我的域,并且当客户单击 HTTP 网络链接时,他们不会被深度链接到应用程序中。这是有道理的。但是在我从中断中恢复之后,鉴于应用程序已经安装,客户何时可以获得他们的资产链接文件?
同样可以说我上传了一个 invalidassetlinks.json 文件。这会破坏现有客户在首次安装应用时已经建立有效关联的当前网络链接吗?
了解这些问题最终将帮助我更好地解决客户问题,并调整我在服务器上看到的资产链接文件的预期流量。
【问题讨论】:
【参考方案1】:让我试着简要介绍一下应用链接的工作原理。我列出了我在玩应用程序链接时收集到的所有东西。还附上了一篇非常好的文章,其中详细介绍了以下内容。
注册和更新应用链接有两个关键组件:Package manager
和 Intent Filter Verifier
。这些是工作流运行的常用步骤:
每次通过包管理器安装或更新应用时,都会生成一个名为 INTENT_FILTER_NEEDS_VERIFICATION
的意图。
Intent Filter Verifier
查找应用清单中定义的标签中指定的域。
对于为应用指定的每个域/主机名,IntentFilterVerfier 会尝试使用 API 调用为每个域获取语句。
域 google.com 的示例 API 调用看起来像 this Google 在Digital Asset Links 小心地隐藏了这方面的 API 文档根据 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
包管理器更新并应用该行为。
故障处理
如果任何域的 fetch 语句返回无效响应,它将影响您现有的所有应用链接。
如果由于连接导致获取语句失败,Android 将重试获取语句。虽然文档中没有提到重试策略是什么,但我们可以放心地假设它是通过 JobScheduler 完成的,并且是线性重试。
如果您打算更改域属性,则需要在语句 JSON 中返回 Cache-Control
键。
您可以在这个写得很好的Blog by Christopher Orr中获得更多信息和调试工作流
【讨论】:
以上是关于AssetLinks 文件预期流量和故障场景的主要内容,如果未能解决你的问题,请参考以下文章