通用深层链接在第一次尝试时不会打开应用程序

Universal deeplinks do not open the app the first time they are tried

应用程序安装时,我看到了对 https://example.com/.well-known/apple-app-site-association 的请求,该请求得到了 200 响应以及正确的 json 响应。

奇怪的事情 1:应用程序然后继续尝试请求 /apple-app-site-association,但失败了,因为文件不在根目录中。如果它已经有 .well-known 文件,为什么它会回退到这个文件?

应用程序完成打开后,我可以进入注释或其他内容并单击深层链接,例如https://example.com/some/path,这将在 safari 中打开。

奇怪的事情 2:在网站在 safari 中打开之前,有几个对 .well-known/apple-app-site-association 和 /apple-app-site-association 的请求。我很确定 .well-known 请求排在第一位,并且 .well-known 版本比根版本多一个。

之后,我现在可以返回到 Notes 并单击深层链接,它现在可以正确打开应用程序。世界上一切都好。

您是否知道第一个.well-known 响应可能有什么问题导致它们无法工作并生成回退请求?还有其他人遇到这个问题或有任何想法吗?

以下是来自 Charles 的经过编辑的屏幕截图(应用程序安装在 11:24:18 完成),以及来自 .well-known/apple-app-site-association.

的经过编辑的回复

HTTP/1.1 200 OK
Content-Type: application/json
Last-Modified: Tue, 06 Jun 2017 00:50:40 GMT
Accept-Ranges: bytes
ETag: "[redacted]"
Content-Length: 156
Connection: Keep-alive

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "[redacted].com.[redacted]",
                "paths": [ "*" ]
            }
        ]
    }
}

iOS 每次都抓取两个位置。如果这两个文件不匹配,我不确定是否有定义的优先顺序,但我知道你 运行 在那种情况下会有奇怪的行为。尽量避免。

看来您确实遇到了某种配置问题,导致文件在第一次尝试时无法正确验证。既然你已经编辑了所有可能让我调查的细节,不幸的是我在这方面帮不上什么忙。

link 点击后重新抓取初始失败是新的 — 我以前从未见过。它必须是最近添加的,以帮助捕获否则会导致 Universal Link 行为中断的情况(安装期间的网络拥塞等)。如果您能够调试最初的抓取错误,这种情况应该不会再发生了。

您遇到这个问题只是因为您正在代理连接(使用 Charles 代理 - 但任何代理都会导致该问题)。 Apple 正在检测到连接被代理并且不信任下载的文件。

在真实场景中,您实际上不会遇到此问题,因为您的用户不会使用 Charles Proxy。

Why would it fall-back to this file if it already has the .well-known one?

Apple 文档建议它会在失败时尝试根文件夹。

Handoff first searches for the file in the .well-known subdirectory (for example, https://example.com/.well-known/apple-app-site-association), falling back to the top-level domain if you don’t use the .well-known subdirectory.

https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/Handoff/AdoptingHandoff/AdoptingHandoff.html#//apple_ref/doc/uid/TP40014338-CH2-SW10