问题说明:使用友盟的各三方平台分享功能,微信登陆功能,统计功能,推送功能。集成之后发现一个奇葩的问题
操作流程:
1.打开app 未登陆状态下:点击分享信息到微信朋友圈,分享成功之后,点击微信登陆。这时候会报错2001.无法获取到登陆信息。报错如下(报错信息1),关闭app之后 重新登陆,可以获取登陆信息一切正常。
2.打开app 直接使用微信登陆,然后点击分享到微信朋友圈。一切正常
3.以上问题只是在未登陆状态下,使用朋友圈的时候才会出现,若是未登陆状态下,分享到微信好友,QQ,空间,微博,等 分享之后再去登陆都是可以正常登陆的
报错信息1
2018-05-23 16:35:56 UShare(Error):[UMSocialManager:1015](iOS.6.8.2): UMeng提示助手编号[core_auth_error_4]:<未发现平台相应类:wxsession
请检查:
1、平台类已实现<UMSocialPlatformProvider>协议
2、此平台枚举值在正常枚举区间内,参考UMSocialPlatformConfig.h —> UMSocialPlatformType枚举。 参考链接检查 https://at.umeng.com/mKfWve?cid=2723>
2018-05-23 16:35:56 UShare(Error):[UMSocialManager:477](iOS.6.8.2): UMeng提示助手编号[core_getuserinfo_error_1]:<未发现平台相应类:wxsession
请检查:
1、平台类已实现<UMSocialPlatformProvider>协议
2、此平台枚举值在正常枚举区间内,参考UMSocialPlatformConfig.h —> UMSocialPlatformType枚举。 参考链接检查 https://at.umeng.com/mKfWve?cid=2723>
2018-05-23 16:35:56.906924+0800 YunTui[21113:2357441] -[YTBaseWebViewController getAuthWithUserInfoFromWechat:withNonc:]_block_invoke [Line 321] ----- Error Domain=UMSocialPlatformErrorDomain Code=2001 "(null)" UserInfo={message=SDK Not Support, please check APP URL Scheme, and -ObjC flag in 'build setting', for more: http://dev.umeng.com/social/ios/quick-integration#2}
2018-05-23 16:36:01.247523+0800 YunTui[21113:2357441] UMLOG: beginbg id:17
这个问题确实够诡异的,开始并无从下手,因为获取微信登陆的信息,只有一个函数调用而已。那么只能从报错的信息入手了
文档报错信息描述:
UMSocialPlatformErrorType_NotSupport = 2001, // 不支持(url scheme 没配置,或者没有配置-ObjC, 或则SDK版本不支持或则客户端版本不支持)
然而这些检查一遍之后发现并没什么遗漏的,全部都配置了。然后就是排查原因:
1,使用友盟demo 调试一遍,按照上述未登陆状态下,先分享到朋友圈,然后再登陆的骚操作来一遍,验证一下是否这种操作能够正常,结果是正常的,然后找到其他的app 操作一遍发现这种操作是允许的。那么基本排除这种操作不允许的可能。
2。将SDK版本更新到最新状态,由于开始的时候使用的微信分享的是简版SDK ,更换到完整版的SDK。再操作问题依然会出现。
3.由于微信支付的是单独导入的SDK,和友盟的无关,但是这两个都包含同一个静态库。所以将微信支付的SDK删除,避免干扰。操作之后发现依然不成功。
4.查看集成代码,由于是自定义的多种分享面板,所以就会区分弹出哪一种面板的判断,然后发现,如果不弹出面板的话,直接将分享三方类型写成 朋友圈UMSocialPlatformType_WechatTimeLine。然后测试发现执行上述骚操作的话,就是正常的,竟然可以通过(说实话现在已经是第二天了,定位到这个问题,长长松了一口气,感觉已经看到胜利的曙光了,只要定位到问题,就解决了80%),然后就发现自定义的分享面板,首先调用UM的移除原来的分享平台,然后添加自己想要的分享平台。这个思路来自定义的分享面板。之前是完全没问题的,单步调试之后发现,每次经过这段代码之后,就会出现诡异的事情。(先分享朋友圈,再登陆,无法成功),然乎将代码改为全部调用友盟的分享平台。实验之后,直接成功。好了,问题解决。
注:问题定位在使用了自定义添加分享三方平台,而不是友盟提供的添加分享平台。描述不好说,上代码啦。
错误代码:
//添加自定义的平台
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_WechatSession
withPlatformIcon:[UIImage imageNamed:@"umsocial_wechat"]
withPlatformName:@"微信好友"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_WechatTimeLine
withPlatformIcon:[UIImage imageNamed:@"umsocial_wechat_timeline"]
withPlatformName:@"朋友圈"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_QQ
withPlatformIcon:[UIImage imageNamed:@"umsocial_qq"]
withPlatformName:@"QQ好友"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_Qzone
withPlatformIcon:[UIImage imageNamed:@"umsocial_qzone"]
withPlatformName:@"QQ空间"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_Sina
withPlatformIcon:[UIImage imageNamed:@"sina_icon"]
withPlatformName:@"新浪微博"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_WechatFavorite
withPlatformIcon:[UIImage imageNamed:@"collect"]
withPlatformName:@"收藏到微信"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin + 1
withPlatformIcon:[UIImage imageNamed:@"link_copy"]
withPlatformName:@"复制链接"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin + 2
withPlatformIcon:[UIImage imageNamed:@"more_icon"]
withPlatformName:@"更多"];
//移除系统的平台。因为系统的默认时添加SDK 中包含的所有的平台
[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatSession),@(UMSocialPlatformType_WechatTimeLine),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_Qzone),@(UMSocialPlatformType_WechatFavorite),@(UMSocialPlatformType_Sina)]];
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
UMSocialPlatformType platType = UMSocialPlatformType_UnKnown;
if (platformType == UMSocialPlatformType_WechatTimeLine) {
platType = UMSocialPlatformType_WechatTimeLine;
}else if (platformType == UMSocialPlatformType_WechatSession){
platType = UMSocialPlatformType_WechatSession;
}else if (platformType == UMSocialPlatformType_QQ){
platType = UMSocialPlatformType_QQ;
}else if (platformType == UMSocialPlatformType_Qzone){
platType = UMSocialPlatformType_Qzone;
}else if (platformType == UMSocialPlatformType_Sina){
platType = UMSocialPlatformType_Sina;
}else if (platformType == UMSocialPlatformType_WechatFavorite){
platType = UMSocialPlatformType_WechatFavorite;
}else if (platformType == UMSocialPlatformType_UserDefine_Begin + 1){
platType = UMSocialPlatformType_UserDefine_Begin + 1; //复制链接
_indexType = 1;
}else{
platType = UMSocialPlatformType_UserDefine_Begin + 2; //系统
_indexType = 2;
}
[self shareWebPageToPlatformType:platType andModel:model];
}];
正确代码:
[UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_WechatSession),
@(UMSocialPlatformType_WechatTimeLine),
@(UMSocialPlatformType_WechatFavorite),
@(UMSocialPlatformType_QQ),
@(UMSocialPlatformType_Qzone),
@(UMSocialPlatformType_Sina),
@(UMSocialPlatformType_UserDefine_Begin+1),
@(UMSocialPlatformType_UserDefine_Begin+2),
]];
//设置分享面板的显示和隐藏的代理回调
[UMSocialUIManager setShareMenuViewDelegate:self];
[UMSocialUIManager removeAllCustomPlatformWithoutFilted];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+1
withPlatformIcon:[UIImage imageNamed:@"link_copy"]
withPlatformName:@"复制链接"];
[UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2
withPlatformIcon:[UIImage imageNamed:@"more_icon"]
withPlatformName:@"更多"];
[UMSocialShareUIConfig shareInstance].sharePageGroupViewConfig.sharePageGroupViewPostionType = UMSocialSharePageGroupViewPositionType_Bottom;
[UMSocialShareUIConfig shareInstance].sharePageScrollViewConfig.shareScrollViewPageItemStyleType = UMSocialPlatformItemViewBackgroudType_IconAndBGRadius;
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
if (platformType == UMSocialPlatformType_UserDefine_Begin+1) {
NSLog(@"点击演示添加Icon后该做的操作");
dispatch_async(dispatch_get_main_queue(), ^{
_indexType = 1;
if (self.sharesCustomBlock) {
self.sharesCustomBlock(_indexType);
}
});
}else if (platformType == UMSocialPlatformType_UserDefine_Begin+2){
[self shareToSysWithModel:self.shareModel];
}else{
[self shareWebPageToPlatformType:platformType andModel:model];
}
}];