100apps / openshare

不用官方SDK,利用社交软件移动客户端(微信/QQ/微博/人人/支付宝)分享/登录/支付。
http://www.gfzj.us/series/openshare/
GNU General Public License v3.0
3.64k stars 661 forks source link

微博、qq授权登录,无论成功或失败,相应的block都不回调 #125

Open yutanchi opened 7 years ago

yutanchi commented 7 years ago

如题,授权成功了,但是成功的block不调用

yutanchi commented 7 years ago

分享和登录的成功失败回调都不执行

yutanchi commented 7 years ago

文档需要更新

yutanchi commented 7 years ago

第二部添加全局回调中,iOS9以上 会调用- (BOOL)application:(UIApplication )app openURL:(NSURL )url options:(NSDictionary<NSString ,id> )options。两个方法中都需要添加 if ([OpenShare handleOpenURL:url]) { return YES; } 否则不回调

zhongdom commented 7 years ago

@yutanchi 你好,我和你遇到一样的问题,分享到qq的时候成功和失败的回调都没有执行。你只增加了- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options这个方法就正常回调了吗?我这边加了依旧没有回调

最终发现是Url Schemes配置有问题,其中一个scheme是qq+(qq的appid转成16机制),这个最好在readme说明一下吧。

jingchangfa commented 7 years ago

@zhongdom 我这也是不会掉,我加了断点之后发现+(BOOL)QQ_handleOpenURL{}里面解析url的代码有问题啊。。。。是腾讯改变了返回格式导致的么

jingchangfa commented 7 years ago

改成了下面这个样子:

// 这个方法有问题,分享授权都是tencent开头的
+(BOOL)QQ_handleOpenURL{
NSURL* url=[self returnedURL];

if ([[url absoluteString] containsString:@"error"]||[[url absoluteString] containsString:@"error_description"]) {
    //分享
    NSDictionary *dic=[self parseUrl:url];
    if (dic[@"error_description"]) {
        [dic setValue:[self base64Decode:dic[@"error_description"]] forKey:@"error_description"];
    }
    if ([dic[@"error"] intValue]!=0) {
        //错误
        NSError *err=[NSError errorWithDomain:@"response_from_qq" code:[dic[@"error"] intValue] userInfo:dic];
        if ([self shareFailCallback]) {
            [self shareFailCallback]([self message],err);
        }
    }else{
        // 成功
        if ([self shareSuccessCallback]) {
            [self shareSuccessCallback]([self message]);
        }
    }
    return YES;
}else if([url.scheme hasPrefix:@"tencent"]){
    //登陆auth
    NSDictionary *ret=[self generalPasteboardData:[@"com.tencent.tencent" stringByAppendingString:[self keyFor:schema][@"appid"]] encoding:OSPboardEncodingKeyedArchiver];
    if (ret[@"ret"]&&[ret[@"ret"] intValue]==0) {
        if ( [self authSuccessCallback]) {
            [self authSuccessCallback](ret);
        }
    }else{
        NSError *err=[NSError errorWithDomain:@"auth_from_QQ" code:-1 userInfo:ret];
        if ([self authFailCallback]) {
            [self authFailCallback](ret,err);
        }
    }
    return YES;
}
else{
    return NO;
}
}
WineKai commented 6 years ago

确实有这问题。我无论是用这个demo还是放在自己项目里,都在登录后没有回调。

WineKai commented 6 years ago

找到了问题,可以正确回调。按@yutanchi说的可以正确回调。