最近升级到最新微信SDK遇到一个比较棘手的问题,多个APP配置相同的Universal Link时调不起微信,支付时会跳转两次才能调成功。后来查了很多资料才算是解决了,在这里分享一下自己的经验。
1、配置Universal Link(通用链接)必须是https的域名,域名证书过期的也不行,我用的是公司官网
2、开发者中心配置:找到对应的App ID,在Application Services列表里有Associated Domains勾选上
然后需要重新配置profiles,否则项目运行不成功
3、工程配置中相应功能:targets->Signing&Capabilites->Capability->Associated Domains,在其中的Domains中填入你想支持的域名,也必须必须以applinks:为前缀。
4、创建一个文件,名必须为apple-app-site-association,切记没有后缀名
单个APP使用
{
"applinks": {
"apps": [],
"details": [
{
"appID": "T***X2DQ**N3.com.baidu.com",
"paths": [ "*" ]
}
]
}
}
多个APP使用同一个apple-app-site-association
{
"applinks": {
"apps": [],
"details": [
{
"appID": "PBD6F.com.baidu.fsyy",
"paths": [ "/applink/gdfs/*" ]
},
{
"appID": "TUX23.com.baidu.bjsjt",
"paths": [ "/applink/bjsjt/*" ]
}
]
}
}
多个APP支持微信、QQ使用同一个apple-app-site-association
{
"applinks": {
"apps": [],
"details": [
{
"appID": "PBD6F.com.baidu.fsyy",
"paths": [ "/applink/gdfs/*","/qq_conn/11057124/*" ]
},
{
"appID": "TUX23.com.baidu.bjsjt",
"paths": [ "/applink/bjsjt/*","/qq_conn/11097571/*" ]
}
]
}
}
appID是由teamID和bundle id组成
paths是指定的路径的链接才能调起APP
/qq_conn/11057124/ 11057124为APP对应的qqkey值
5、上传apple-app-site-association文件到https域名所对应的根目录或者.well-known目录下
(一)单个APP的用Safari输入 https://api.baidu.com/apple-app-site-association
可验证是否能打开APP
(二)多个APP的是域名加路径paths https://api.baidu.com/applink/gdfs/
https://api.baidu.com/applink/bjsjt/
6、配置微信开放平台、QQ互联平台的Universal Link
用的是可以打开APP的路径
QQ需要在QQ互联平台配置https://connect.qq.com/index.html
应用管理---移动应用
编辑单个应用的基本信息
7、需要在工程里的实现AppDelegate里对应的方法:
//配置Universal Links唤醒的APP 实现引流
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
// NSUserActivityTypeBrowsingWeb 由Universal Links唤醒的APP
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
NSString *host = webpageURL.host;
if ([host containsString:@"api.baidu.com"] || [host containsString:@"apitest.baidu.com"]) {
//QQ处理Universallink
if (webpageURL && [TencentOAuth CanHandleUniversalLink:webpageURL]) {
return [TencentOAuth HandleUniversalLink:webpageURL];
}
//进行我们需要的处理
return [WXApi handleOpenUniversalLink:userActivity otherDelegate:self];
} else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return YES;
}
8、在info.plist文件中的LSApplicationQueriesSchemes下新增两项:
weixinULAPI
weixin