最近微信对老版本sdk开始限制部分功能,分享、第三方登陆、支付等功能都会出现未验证应用,因此不得不更新最新版本sdk,下面就主要介绍对接最新版本的坑,主要是Universal Links这方面(主要是不了解)。html
要对接最新的微信sdk,你必需要了解一下Universal Links是什么,由于最新sdk根据Universal Links来判断来源app是否可信。json
IOS主流跳转方案有两种:xcode
1:Scheme微信
2:Universal Linksapp
Scheme的协议是由开发者彻底自定义,同时访问失败没有任何内容能够展示,因此IOS9就引入Universal Links。Universal Links 是经过域名下apple-app-site-association来肯定app,由于域名又必须是https又不会重复,还能看成地址来访问网页,解决了上述两个问题。ide
首先你要建立apple-app-site-association文件(注意没有任何后缀名,纯文本的文件),放到你https域名更目录下,访问对应的域名https://xxx.xxx.xx/apple-app-site-association 能下载文件就能够(也能够放到根目录下.well-known文件夹下,跟ssl证书配置的同样的文件夹,其余文件夹暂时没试过是否能够,知道的小伙伴能够留个言)。文件内容是个json字符串:测试
1 { 2 "applinks": { 3 "apps": [], 4 "details": [ 5 { 6 "appID": "%1.%2", 7 "paths": ["*" ] 8 } 9 ] 10 } 11 }
其中%1是苹果开发者帐号的teamid,%2是指对应app的bundle idui
teamid不知道在哪里的小伙伴,参考下图(bundle id我就不作赘述了 不知道的小伙去面壁思过)spa
json中path是干什么用的:3d
1:用来告诉safari那些是Universal Links。例如:https://www.baidu.com 是你的域名,path配置为["/test/*"],那么你在手机里safari打开https://www.baidu.com/test/xxx就会有app打开提示以下图(这个提示图要下个步骤配置好才有):
你访问https://www.baidu.com/ex/xxx 就没有提示
2:启动 App 时 看成参数给 App 传进来,但因为这是为了对接微信sdk因此这块内容不作深究,有兴趣的小伙伴能够研究一下
在苹果开发者帐号里面勾选对应app的Associated Domains
在xcode里面配置(若是你是自动获取签名方式,xcode里面添加好Associated Domains,开发者后台自动勾选Associated Domains)
注意Domains填的就是上一步apple-app-site-association放的域名,例:applinks:www.baidu.com(不要https://,不要加路径path)
到这里Universal Links的配置就ok了,手机从新安装好app,safari打开对应的link地址就会提示(注意我手机打开提示要往上拉一下才看获得,致使我花了大半时间确认是否配置出错,后来才发如今上面):
其中links地址要带上https://(看微信提示文字便可)
填入微信开放平台对应的appid便可
初始化代码编辑:
[WXApi registerApp:@"微信appid" universalLink:@"https://www.baidu.com"];
回掉代码编辑:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler { return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }
注意要增长WXApiDelegate,才能回掉onResp,业务代码就能保持不变
要测试是否全部都正常能够调用微信sdk自检代码
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }];
[WXApi registerApp:@"微信appid" universalLink:@"https://www.baidu.com"];
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"step:%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }];
以下图所示:这表示对接成功
对接了最新sdk以后不必定能立马去掉未验证应用提示。 根据微信解释以下:旧版本没有正确接入新版OpenSDK(有分享二跳,受权登陆二次确认的状况),新版 本刚修复这个问题。须要等新版本放量上去让总体错误率降低到90%如下才会从未验证应用中移除。
参考文档:iOS应用出现未验证应用的问题排查