iOS 微信SDK更新后需要UniversalLink解决方案
一:缘由
微信更新1.8.6的SDK后,在delegate注册时多了一个universalLink
参数,当时我是一脸懵逼的,啥玩意啊?
微信官方是这么解释的(微信iOS开发文档)。
WXApi.registerApp(appid: String, universalLink: String)
意思大概就是之前是用URL Schemes
方式跳转APP,现在为了安全性等原因,改用universalLink
方式。蛋疼的是更新之后就必须用这种方式,要是不填universalLink,不管是分享还是支付都无法调起微信,真是有够折腾人的。
二:什么是UniversalLink
中文译叫:通用链接
,简单来说就是一个URL,当用户在浏览器中访问此url时,苹果会检测此URL对应的APP是否已安装。
已安装则跳转到APP。
未安装则访问此URL实际内容。
这里有几篇苹果官方文档的解释,使用谷歌浏览器翻译一下就好了,文章都不长,强烈建议都认真看一圈。我也是反复读了很多遍后才理解这玩意的。
支持通用链接
允许应用程序和网站链接到您的内容
启用通用链接
处理通用链接
三:如何开启UniversalLink
步骤还是比较多的,这里先列出来操作步骤(顺序不分前后的)。
- 1、让后台准备一个https的URL,此链接最好能直接指向你们产品的首页,一定要https的,后面我会说原因。然后去微信开放平台填写
UniversalLink
- 2、App Store应用管理和Xcode开启
Associated Domains
,并填写对应Domains
- 3、制作
apple-app-site-association
文件,并放置在准备好的URL目录下 - 4、填写微信新的
LSApplicationQueriesSchemes
- 5、处理通用链接
四:步骤详解
- 1.为什么要准备https的URL?虽然苹果说支持http和https,但是微信要求就是这样的,在微信开放平台中填入准备好的
UniversalLink
如图 - 2.App Store应用管理开启
Associated Domains
启用Xcode-Capabilities中的Associated Domains
,以applinks:
+你准备的UniversalLink
的形式填写对应值。例如:applinks:help.wechat.com
- 3.制作
apple-app-site-association
文件,并放置在准备好的URL目录下,先看看官方的解释
大致意思就是苹果会在APP第一次启动时(仅第一次),去访问你准备好的那个域名根目录或.well-known
子目录下的apple-app-site-association
文件。最好两个地方都放一份吧,而且还要保证能get请求到此文件,该文件不需要后缀名。
其实就是一个json,apps数组不用管,details里面填入对应得appID和paths。
paths则是可访问APP的对应页面路径,如果你只是单纯的想启动APP使用通配符即可,更多关于paths的介绍这里不做过多撰述,下面有个我的例子,替换APPID和BundleID就可以了。
{
"applinks":{
"apps":[
],
"details":[
{
"paths":["*"],
"appID":"abcdefg.com.wechat.wexin"
}
]
}
}
ok,到这里apple-app-site-association
文件就制作好了,把它交给你的后台人员,按照之前说的放到相应目录。一切就绪后,打包一次APP,然后你就可以先在safari浏览器中测试走一波,把完整的URL地址输入进去。页面加载完手指往下拉一下,看是否有打开APP的提示,如果有则配置成功!
-
4.也许这个时候你迫不及待想去调起微信,结果一定是失败的,因为此次更新后,还要添加一个新的Schemes。
在Xcode中,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下图所示)。
-
5.处理通用链接
当APP被UniversalLink调起后,可以在delegate中使用如下方法进行对应处理(这里使用了微信的处理方式)
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
return WXApi.handleOpenUniversalLink(userActivity, delegate: self)
}
五、总结
做完这些后,应该就可以成功调起微信了,如果还有什么特殊的需求,建议多仔细阅读苹果官方文档,和微信更新的文档。本文只是记录自己踩坑的过程,如果能帮助你,感谢给颗小星星。如有不足之处,请指正。