如果你的app需要调用第三方app,不管是调起微信还是QQ或者其他第三方app的时候,都提示Universal Links校验不通过,并且文章内容所述的步骤都没有问题。此时你一定一定要检查项目中有没有集成聚合类的SDK,比如友盟这类的(一语惊醒梦中人)。比如我的项目中同时集成了微信的openSDK和友盟,友盟中包含了微信SDK,所以就出现以上问题。删除了友盟中的微信SDK就可以成功调起微信了。(或者可以删除微信openSDK)
Error:fail to load Keychain status:-25300, keyData null:1
wxlog:url can not be handled by WeChat SDK
关于Universal Links的介绍,官方有详细说明。
1、创建apple-app-site-association文件
apple-app-site-association文件是一个json文件格式,不带后缀,格式如下
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID.BundleID",
"paths": [ "/*" ]
}
]
}
}
appID是由TeamID和BundleID组成
TeamID:在Apple开发者中心可以查看
BundleID:即项目中的Bundle Identifier
paths:app的支持路径,如果不知道如何配置,可以直接写一个通配符*即可,如果有具体路径,则所有路径最后都要加上通配符/* 比如/path/abc/* 具体配置参照对应平台的开发文档处理
2、上传apple-app-site-association文件到服务器
将文件放在服务器的根目录下或者.well-known的子目录下,服务端一定要支持https访问
3、验证文件是否可用
在浏览器上输入https://你的服务器域名/apple-app-site-association或者https://你的服务器域名/.well-known/apple-app-site-association是否能打开或者下载apple-app-site-association这个文件,如果可以,说明服务端文件配置成功。比如你的服务器域名为api.google.com,那么在浏览器访问https://api.google.com/apple-app-site-association或者https://api.google.com/.well-known/apple-app-site-association或者https://app-site-association.cdn-apple.com/a/v1/api.google.com
4、app端需要配置applinks
如图,在Xcode中添加Associated Domains(前提是项目使用的开发者证书也需要将Associated Domains模块打开,具体请在开发者证书配置中检查),格式为:applinks:你的服务器域名,比如applinks:api.google.com
5、检验universal links是否生效
在手机Safari浏览器中输入https://你的服务器域名/xxx(比如https://api.google.com/abc123),如果浏览器顶端跳出你的app,说明已经生效。abc123对应通配符,可以随意输入,如果有其他路径,路径需要跟上面提到的paths中设置的路径保持一致
6、跳转到微信,使用微信对应服务
微信官方接入文档
微信开发者平台需要开通对应服务的授权,比如微信客服,已经要做好关联配置,然后获取到对应的企业ID和客服URL
WXOpenCustomerServiceReq *req = [[WXOpenCustomerServiceReq alloc] init];
req.corpid = @"企业ID";
req.url = @"客服URL";
return [WXApi sendReq:req completion:nil];
重要的方法实现
// 在AppDelegate.m文件中实现以下方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 微信api调用日志,如果调起微信的时候出错,请在注册方法之前调用日志。生产环境的时候,记得删除这段代码
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString * _Nonnull log) {
NSLog(@"wxlog------>%@", log);
}];
// 注册
[WXApi registerApp:@"wx1234567890" universalLink:@"https://api.google.com/"];
// 微信调起自检,查看universal是否生效,一个代码需要在注册方法后调用才生效,在生产环境需要删除这段代码
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
NSLog(@"ul---->%@", result.mj_JSONObject);
}];
}
// 这个方法必须实现
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
NSLog(@"continueUserActivity------");
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
// 微信SDK回调
- (void)onResp:(BaseResp*)resp {
// WXOpenCustomerServiceResp微信客服
if ([resp isKindOfClass:[WXOpenCustomerServiceResp class]]) {
// errCode为0表示成功,非0表示失败
if (resp.errCode) {
NSLog(@"调用微信客服失败---->%@", resp.errStr);
}
}
}
以上步骤是Universal Links的完整配置和基础的微信调起实现