iOS Universal Links
原创 2020-03-29
上周,微信开发者公众号发布了《微信开放平台移动应用 SDK 更新提醒》的文章,提醒开发者升级微信iOS SDK,以适配iOS 13系统版本的更新,主要是Universal Links的适配。
对于开发者来说,本次更新主要涉及到Universal Links的适配。Universal Links并不是新技术,早在iOS 9系统上就已经在应用了。在微信openSDK 1.8.6版本之前,iOS APP使用的微信登录、分享功能借助的是URL scheme的通信方式,在1.8.6版本后,则采用了Universal Links方式对调用openSDK的合法性进行校验。和URL scheme方式相比,Universal Links方式操作更加安全便捷。
Universal Links的原理比较好理解:iOS APP可以配置支持applinks的Associated Domains,在APP安装或更新时,系统会从指定域名的.well-known/apple-app-site-association路径访问Universal Links配置。Universal Links配置指示了APP能处理的该域名下的路径(可以是一个或多个),也就是该域名的指定路径和APP的内容有对应的关系。当从Safari中访问该域名下的指定路径时,iOS系统会查询当前url是否在APP有注册,有的话就可以直接打开对应APP的内容。
微信openSDK iOS接入指南,有详细的配置说明,这里只谈几个需要注意的点。
Universal Links的格式
通过以下方式访问apple-app-site-association:
https://<fully qualified domain>/.well-known/apple-app-site-association
在iOS 13系统上,最新的apple-app-site-association格式有变动:
{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
"components": [
{
"/": "/buy/*",
"comment": "Matches any URL whose path starts with /buy/"
}
...
]
}
]
}
}
这个格式和iOS 12使用的格式不一样。
iOS APP的配置和处理
在正确配置了Associated Domains之后,在AppDelegate的
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Swift.Void) -> Bool
将会收到Universal Links的调用,在这个方法中根据不同的请求url调用APP页面。
确保Universal Links生效
保持手机网络畅通,更新或重装APP,以便iOS 系统能拉取到最新的Universal Links配置(也就是请求https://<fully qualified domain>/.well-known/apple-app-site-association
)。
如何验证Universal Links生效
可以使用iOS自带的备忘录程序,输入链接,长按链接,如果弹出菜单中有”在‘xxx’中打开”,即表示配置生效。
微信开放平台的Universal Links如何填写?
微信开放平台的Universal Links应该是一个不带参数的url,路径可以根据需要自定义,比如:https://<fully qualified domain>/wechat/
,同时需要在apple-app-site-association文件配置一项/wechat/*
。
Supporting Associated Domains in Your App
相关文章:
iOS WKWebView详解及JS Bridge同步调用问题
iOS performSelector使用int等基本数据类型的问题
iOS CLLocationManager的弹窗问题
iOS crash log分析实践
Using a Custom Toolchain in Xcode