本人用ShareSDK做分享和第三方登录,登录先不讲,本节只做分享成功或失败后回调问题。相信好多人会有这个疑惑就是在微信分享成功后没有成功后的方法回调,我在ShareSDK论坛也发表过帖子问过,ShareSDK论坛官方技术也是这么说的。
下面看下微信好友分享成功后的状态,点击状态栏左上角那个返回按钮只回调取消方法;点击留在微信没有响应;点击返回应用也没有响应。因为留在分享平台之后分享平台是不会在将分享的信息返回给自己的应用的,所以没有办法知道状态,但依然会以Cancel状态回调。就算分享成功了,不点按钮直接返回应用也算是取消的,所以这就是为什么点击左上角的返回app走的是分享的取消回调方法。是不是很痛苦?这个不给响应怎么在自己的应用里面判断是否分享成功了呢?
解决办法如下分享的代码:
#pragma mark - WXDelegate 微信分享/登录/支付方法回调
- (void)onResp:(BaseResp *)resp {
// 1.分享后回调类
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
if (resp.errCode == 0) {
//SendMessageToWXResp *resp1 = (SendMessageToWXResp *)resp;
[Common showSuccess:@"分享成功" view:KEYWINDOW];
}else{
[Common showError:@"分享失败" view:KEYWINDOW];
}
}
// 2.微信登录向微信请求授权回调类
if ([resp isKindOfClass:[SendAuthResp class]]) {
if (resp.errCode == 0) {
//成功
if ([_wxDelegate respondsToSelector:@selector(loginSuccessByCode:)]) {
SendAuthResp * resp2 = (SendAuthResp *)resp;
[_wxDelegate loginSuccessByCode:resp2.code];
}
}else [Common showError:@"授权失败" view:KEYWINDOW];
}
// 3.支付后回调类
if ([resp isKindOfClass:[PayResp class]]) {
//对支付结果进行回调
//PayResp *resp3 = (PayResp *)resp;
}
}
可以看到 SendMessageToWXResp是分享后回调类;SendAuthResp是微信登录授权后回调类;PayResp是支付后回调类。之前没有收到分享后回调就是因为没有判断SendMessageToWXResp。
主要分享的方法代码:
[ShareSDK share:shareType //传入分享的平台类型
parameters:shareParams
onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
//NSLog(@"状态 = %zd",state);
switch (state) {
case SSDKResponseStateBegin:
{
//开始
}
case SSDKResponseStateSuccess:
{
//成功
[Common showSuccess:@"分享成功" view:KEYWINDOW];
break;
}
case SSDKResponseStateFail:
{
//失败
[Common showError:@"分享失败" view:KEYWINDOW];
break;
}
case SSDKResponseStateCancel:{
[Common showError:@"取消分享" view:KEYWINDOW];
//点击留在微信或者返回应用不回调方法
//点击状态栏处的返回应用不管是分享成功还是失败都回调取消方法
break;
}
default:
break;
}
}];