ShareSDK v7.0.3 (更新日期:2020年6月16日)
最近每次更新版本时都会收到一封邮件,连续收到几次后,就决定要把这件事(UIWebView替换成WKWebView)提上日程了。简单的展示页面中UIWebView替换完成后,下一项工作就是SDK更新了。
1,AFNetworking更新(目前用的好像还是3.0,哈哈。。);
2,友盟SDK更新,包括统计SDK,ShareSDK。
本片博客主要记录下在更新ShareSDK中遇到的问题,及一些需要注意的地方。
1,社会化分享 SDK
2,U-Share集成文档
文档中有几个关键点:
[1],其实v6.9.7版本的SDK中关于UIWebView替换成WKWebView的问题已经更新了。
[2],这个就是我这是更新中遇到的主要的问题,我想应该也有不少小伙伴也遇到了吧!!!!在下面会详细写下。
微信官方文档(关于openSDK1.8.6的更新说明)
iOS常见问题
apple-app-site-association 验证是否正确
[1], 要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的 id。(如下图所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册 id)。
/** #import "WXApi.h" */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //向微信注册 [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK]; return YES; }
[2] ,使用SDK 自检函数排查接入问题
SDK1.8.7版本,WXApi新增了自检函数checkUniversalLinkReady:,帮助开发者排查SDK接入过程中遇到的问题。
注意事项:
调用自检函数之前必须要先调用registerApp:universalLink接口, 并确认调用成功。自检过程中会有Log产生,可以先调用startLogByLevel函数,根据Log排查问题,会多次回调block。仅用于新接入SDK时调试使用,请勿在正式环境中调用。
示例代码://在register之前打开log, 后续可以根据log排查问题 [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }]; //务必在调用自检函数前注册 [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK]; //调用自检函数 [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }];
WXULCheckStep值说明:
step = WXULCheckStepParams: 参数检查
step = WXULCheckStepSystemVersion: 当前系统版本检查
step = WXULCheckStepWechatVersion: 微信客户端版本检查
step = WXULCheckStepSDKInnerOperation: 微信SDK内部操作检查
step = WXULCheckStepLaunchWechat: App拉起微信检查
step = WXULCheckStepBackToCurrentApp: 由微信返回当前App检查
step = WXULCheckStepFinal: 最终检查
会依次回调这7个step,当回调了WXULCheckStepFinal,说明检测通过,SDK接入成功。 任一step回调的result.success为NO, 流程终止,后续不再回调,可以根据result.errorInfo的查看当前步骤错误的原因,根据result.suggestion修复问题.
因为微信开放平台的要求, 所以必须配置 Universal Link, 否则 iOS13 无法使用微信分享、支付功能。
公司域名:www.ABCD.com
项目中配置Associated Domains:applinks:www.ABCD.com
apple-app-site-association文件中将paths配置为:"paths": [ "/app/*"],注意后面要加*(星号通配符)
微信开放平台中配置Universal Links:https://www.ABCD.com/app/
项目中注册微信时 : https://www.ABCD.com/app/
1,在项目中开启Associated Domains 域
applinks:后面是你的域名,例如 applinks:help.wechat.com
2,制作apple-app-site-association 文件
创建一个json格式的命名为apple-app-site-association文件,注意这个文件必须没有后缀名,文件名必须为apple-app-site-association。
我们都知道,每个开发者账号的Team ID是唯一的,每个App的Bundle ID是唯一的,那么问题来了:同一份apple-app-site-association文件需要同时适配多个App该如何处理?
解决办法就是在区分appID的同时,还需要注意必须配置不同的paths,否则当设备同时安装多个应用会出现分享完成后跳转异常,原因是当分享完成后跳转回来的时候是通过paths来决定应该返回哪个App的。
如果两个appID中配置的paths完全相同就会出现:
应用A→发起分享→跳转到微信内→选择好友/朋友圈发送→跳转回应用B
而理想情况应该是:
应用A→发起分享→跳转到微信内→选择好友/朋友圈发送→跳转回应用A{ "applinks": { "apps": [], "details": [ { "appID": "TeamID.BundleID1", "paths": [ "/wx_conn/app1/*", "/qq_conn/10000001/*"] }, { "appID": "TeamID.BundleI2", "paths": [ "/wx_conn/app2/*", "/qq_conn/10000002/*"] } ] } }
{ "applinks": { "apps": [], "details": [ { "appID": "HQH47S9JSQ.help.wechat.com", "paths": [ "/app/*" ] } ] } }
details:是个数组, 可以配置多个app;
appID:你的Team ID+BundleID,中间用.隔开;
paths:域名后拼接的路径, 不能带query参数, 微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
3,上传apple-app-site-association 文件
把你刚才制作好的apple-app-site-association文件交给服务器端的小伙伴,放到服务器的根目录下或者放到.well-known文件夹下。苹果会优先去.well-known文件夹下找, 如果没有就去跟目录下载。
还有一种说法是,iOS9.3之前是根目录下即:https://www.ABCD.com/apple-app-site-association,iOS9.3之后是.well-known目录下即:https://www.ABCD.com/.well-known/apple-app-site-association。
文件路径,二选一(不带任何后缀):
https://help.wechat.com/apple-app-site-association
https://help.wechat.com/.well-known/apple-app-site-association
4,检测apple-app-site-association文件是否上传成功
App Search API Validation Tool
5,验证Universal Links
1>Safari浏览器验证
在浏览器中输入https://www.ABCD.com/app/,例如输入https://help.wechat.com/app, 打开网站后一定要下拉,会有类似这样的弹窗, 点击打开会直接跳转APP。
2>备忘录验证
打开备忘录输入https://www.ABCD.com/app/,例如输入https://help.wechat.com/app,点击会直接跳转自己的app, 或者长按会弹窗 在"app"中打开。
6,微信开放平台配置Universal Links
微信要求填写格式是https开头,"/"结尾, 所以填写https://help.wechat.com/app/
7,AppDelegate配置
1>,在Xcode中,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下图所示)。
2>,注册及自检函数
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef DEBUG /*在register之前打开log, 后续可以根据log排查问题*/ [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }]; #endif // 向微信注册 [WXApi registerApp:kWXAppID universalLink:kUniversalLinks]; #ifdef DEBUG /*调用自检函数(支付或者分享成功之后要删除这个方法,不然会导致会每次打开app都会与微信进行关联)*/ [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"---------%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }]; #endif } /* 打印如下:说明是OK的!! app[14232:3095208] ---------0, 1, check passed, app[14232:3095208] ---------1, 1, check passed, app[14232:3095208] ---------2, 1, check passed, app[14232:3095208] ---------3, 1, check passed, app[14232:3095208] ---------4, 1, check passed, app[14232:3095208] ---------5, 1, Universal Link check passed. The application is launched by WeChat via Universal Link, app[14232:3095208] ---------6, 1, All Check Passed!, */
3>,回调测试 :
当APP被UniversalLink调起后,可以在delegate中使用如下方法进行对应处理,获取相关paths信息等(这里使用了微信的处理方式)。
// 通用链接会调用 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray
> * __nullable restorableObjects))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *webpageURL = userActivity.webpageURL; if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) { // 如果UniversalLinks跳转 会到这里 NSLog(@"%@",webpageURL); } else { [[UIApplication sharedApplication]openURL:webpageURL]; } } return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }
4>,如果调用的是友盟分享,切记要配置
-(void)confitUShareSettings{ //配置微信平台的Universal Links //微信和QQ完整版会校验合法的universalLink,不设置会在初始化平台失败 [UMSocialGlobal shareInstance].universalLinkDic = @{@(UMSocialPlatformType_WechatSession):TCUMUnivernalLink}; }
注意点
- 如果什么都配置正确了,还是调不起app, 就把app删除了重新安装一下。
- 如果所有都配置完成了, 微信分享登录都可以,但是还会出现"未验证应用", 是因为未验证应用名单非实时更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正确调用记录,第二天才会移除出名单, 并且前一天正确分享次数在10次以上。
- 添加测试函数checkUniversalLinkReady后,每次启动都会跳转微信,然后再跳回app,注释掉就不会再跳微信了。
相关文章
(SDK) - 更新微信开放平台 openSDK1.8.6
iOS 微信openSDK使用Universal Links填坑
Universal Link--apple-app-site-association文件问题
IOS 配置Universal Links