为了适配iOS13&xcode11,需要更新一些库,更新微信支付SDK的时候,有用到Universal Links(iOS 9之后),从此认识了Universal Links,可以理解为与URL Schemes相似,用来唤醒app&跳转app用的。这里不介绍Universal Links是什么(可以查看官网解析),只做简单配置与使用。
一、配置apple-app-site-association
新建apple-app-site-association文件(json格式),重要事情说3遍(不带后缀,不带后缀,不带后缀),如下:
{
"applinks": {
"apps": [],
"details": [{
"appID": "D3KQX62K1A.com.example.photoapp",
"paths": ["/albums"]
},
{
"appID": "D3KQX62K1A.com.example.videoapp",
"paths": ["*"]
}]
}
}
details的值作为字典数组的JSON表示,每个应用程序一个字典。对于每个特定于应用程序的字典,包括一个appID和paths:
appId
格式为:<team identifier>.<bundle identifier>
<team identifier>解析一下,登录开发者找(Xcode里的不准确),如图:
paths
实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app,或者通过路径唤醒不同的app或通过路径判断app跳转哪个页面,格式:
"paths": [ "/videos/collections/*", "NOT /videos/samples/2010/*", "/videos/samples/201?/*"]
*代表了可识别域名下所有链接
/wwdc/news/来指定某一个特殊的链接
/videos/wwdc/2015/*, 来指定网站的某一部分
假设你公司有几个APP,都需要用到Universal Links,那么就可以用paths区分,不需要分别上传多个服务器。假设有A、B、C 3个APP,这可以这样填写
{
"applinks": {
"apps": [],
"details": [{
"appID": "D3KQX62K1A.com.example.photoappA",
"paths": ["/appA"]
},
{
"appID": "D3KQX62K1A.com.example.videoappB",
"paths": ["appB"]
}],
{
"appID": "D3KQX62K1A.com.example.videoappC",
"paths": ["appC"]
}]
}
}
需要注意的是后面的Universal Links需要添加paths来区分,比如:
https://baidu.com/appA/
二、上传apple-app-site-association到服务器
把apple-app-site-association文件放到服务器的根目录下,也可以放到.well-known这个子目录下。(注意:这里需要支持https的服务器,这个根据公司和自己的需求可以放在任意的服务器,只要能访问就行了)
比如放在域名为www.baidu.com的域名下,那么链接
https://www.baidu.com/apple-app-site-association
可以访问
三、实际使用(微信支付,这里只讲Universal Links的使用,具体的支付不详细讲)
1.到微信开放平台注册应该,填写app信息最后一行有一个Universal Links(代码注册微信sdk时要用到),这里填写以https开头,以/结尾,假如域名为baidu.com,则Universal Links为
https://baidu.com/
如果需要paths来区分跳转不同的app,这后面需要添加paths,如:
https://baidu.com/appA/
注册微信sdk时,WXuniversalLink就是这里的Universal Links
[WXApi registerApp:WXappid universalLink:WXuniversalLink];
盗用一下别人的图,我的被领导收藏账号密码了
- 登录苹果开发者后台,在Identifiers找到对应的应用的Identifiers,进行编辑,勾选Associated Domains功能,保存并重新生成配置(自动管理的会自动生成,手动管理的需要重新下载描述文件安装)如图:
3.在Xcode里面添加Associated Domains
以applinks:开头,后面写上域名,假如域名为baidu.com,这填写为applinks:baidu.com
完成上面的步骤差不多就OK了,有可能有朋友遇到app一直正在连接微信中,唤醒不了微信,可能你没有重写AppDelegate的方法,
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(nonnull void (^) (NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
return [WXApi handleOpenUniversalLink:userActivity
delegate:self];
}
还有一个问题就是在info.plist添加
LSApplicationQueriesSchemes里分别添加 weixin,wechat, weixinULAPI。
剩下的微信支付请按照微信文档操作(这里只做唤醒和跳转微信,Universal Links)。