昨天领导反馈app微信分享到朋友圈出现“未验证应用”的提示信息。通过追踪找到了解决办法。
问题的原因
由于苹果iOS 13系统版本安全升级,为此openSDK在1.8.6版本进行了适配。 1.8.6版本支持Universal Links方式跳转,对openSDK分享进行合法性校验。
PS:现在openSDK出了最新的版本1.8.7,新增了自检函数checkUniversalLinkReady:,可以帮助开发者排查SDK接入过程中遇到的问题,在哪一步出错了(共7步,见接入文档https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html#jump4)。
问题的解决办法
1.配置Universal Links
1)常见并编辑一个名为apple-app-site-association,无需后缀名,务必符合标准的json格式,格式如下:
{
"applinks": {
"apps":[],
"details": [
{
"appID": "你的app的teamID + Bundle Identifier",
"paths": ["*"]
}
]
}
}
2)将apple-app-site-association文件发给服务器端的同事,让他上传到域名的根目录下或者.well-known的子目录下(这里的域名必须要是可访问的域名,由服务器端的同事给到)。
2.在app里面配置通用链接
1)首先检查一下Xcode-Targets-Signing&Capabilities 是否有Associated Domains,如果没有,需要去开发者账号在identifer里选择跟当前Xcode所用bundle identifier相同的那一组,进去之后,将Associated Domains前面的方框打上勾,如果已经打勾了,配置如下:
2)实现AppDelegate里支持通用链接的实现方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
3)修改微信注册方法
由[WXApi registerApp:kAppid]改为[WXApi registerApp:kAppid universalLink:kUniversalLinks],这里的universal links为第一步第2)里服务器同事给的链接地址
4)配置info.plist
这里如果是从旧版更新WechatOpenSDK1.8.6/7版本的话,需要在这个里面调用微信里的这个方法,并且在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin和weixinULAPI
5) 微信开放平台配置Universal links
需要把服务器同事给的地址填写到app iOS信息Universal Links,同时app的下载地址也一定要填写app在app store的地址,填写好后保存,开放平台需要审核,可能要等一段时间Universal Links才能生效,我就是昨天下午设置好没生效,今天早上来才生效。
3.检查是否配置好的Universal links是否生效
生效的标准结合这两个文档https://docs.qq.com/doc/DZHNvSGJLS3pqbHNl的步骤和https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html#jump4提供的自检过程
4.如果以上步骤都已经完成,并且自检正确,再分享出去,就不会再出现“未验证的应用”字样了。
PS:上周五(8-7)按照上述步骤,不会出现“未验证的应用”字样,到了周一(8-11)分享,发现又会出现,本人手机系统iOS13.5.1,微信7.0.14;换了同事的手机iOS13.1.2,微信7.0.14发现她的就正常,这个问题需要持续关注,个人觉得是微信sdk的bug;打包上线后,等到用户用一段时间后,新版本放量上去让整体错误率下降到90%以下才会从未验证应用中移除,问题得到彻底解决。