iOS: Universal link 总是打开应用

iOS: Universal link always opens the app

服务器上的 apple-app-site-associated JSON 如下所示:

{
    "applinks": {
        "apps": [],
        "details": {
            "TEAM_AND_BUNDLE_ID": {
                "paths": [
                    "*"
                ]
            }
        }
    }
}

我希望调用方法 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool,这样我就可以确定是否应该实际打开应用程序(调用 myurl 为真。com/open,仅调用为假 myurl.com).

但是并没有调用appdelegate方法,只是简单的打开了app

最好的解决方案是将该路径组件放入 JSON 但据我所知 JSON 仅在安装应用程序时下载,因此 JSON 不被考虑在内。

这是正确的行为。如果 apple-app-site-association 文件中满足条件的 URL 被点击,您的应用将 始终 启动。您无法在 continue userActivity.

内控制它

安装应用程序时下载 apple-app-site-association 文件是正确的。它将通过App Store重新下载更新,这意味着要添加新路径并确保所有用户都有它们,您通常需要发布应用程序更新。

排除站点根路径的正确方法是按如下格式格式化您的 apple-app-site-association 文件:

{
    "applinks": {
        "apps": [],
        "details": {
            "TEAM_AND_BUNDLE_ID": {
                "paths": [
                    "NOT /",
                    "*"
                ]
            }
        }
    }
}

/ 仅匹配网站的根目录,* 匹配整个 站点(包括根目录)。这是有效的,因为 iOS 按顺序评估规则,一旦找到匹配项就会停止。

无需不断更新您的应用程序即可处理此问题的更好方法是使用托管的深度 link 服务,例如 Branch.io(全面披露:我在 Branch 团队)或Firebase 动态链接。