iOS:通用链接始终打开应用程序

时间:2017-06-21 14:53:11

标签: ios ios-universal-links

服务器上与apple-app-site相关的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是false)。

但是没有调用appdelegate方法,只需打开应用程序。

最直接的解决方案是将该路径组件放入JSON中,但据我所知,只有在安装应用程序时才会下载JSON,因此不会考虑JSON中的任何更改。

1 个答案:

答案 0 :(得分:2)

这是正确的行为。如果点击符合apple-app-site-association文件条件的网址,您的应用将始终启动。你无法在continue userActivity内控制它。

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

排除网站根路径的正确方法是格式化apple-app-site-association文件,如下所示:

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

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

更好的方法是在不需要不断更新应用的情况下处理此问题,方法是使用托管的深层链接服务,例如Branch.io(完全披露:我在分支机构团队中)或Firebase动态链接。