iOS 解决微信登录和友盟微信分享回调方法冲突的问题(state字段)

由于公司需要 微信登录使用的微信官方SDK 微信分享使用友盟微信分享 因为友盟SDK中已经集成微信SDK 所以appDelegete中的回调方法中注册回调地址时 登录和分享只走其中一个 查阅不少资料 大部分都是写的友盟分享和微信支付冲突的问题
就是在回调的url中加一个判断如下:

   if ([options[UIApplicationOpenURLOptionsSourceApplicationKey] isEqualToString:@"com.tencent.xin"] && [url.absoluteString containsString:@"pay"]) {
//微信支付
        [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }else{
//友盟分享
        [[UMSocialManager defaultManager] handleOpenURL:url options:options];
    }

我打印了url 但是url中并没有区分登陆还是分享的字段
后来注意到微信登录 获取权限时有一个state字段
然后回调url中 刚好有一个state字段与其对应


state字段微信官方解释

然后通过自己自定义的state字段完美解决问题

////微信登陆
- (void)wechatLoginBtnClick{
    [SVProgressHUD showWithStatus:@"正在登录..."];
    if ([WXApi isWXAppInstalled]) {
        WXApiManager *manager = [WXApiManager sharedManager];
        manager.delegate = self;
        SendAuthReq *req = [[SendAuthReq alloc] init];
        req.scope = @"snsapi_userinfo";
        req.state = @"login";
        [WXApi sendReq:req];
    }
    else {
        [self setupAlertController];
    }
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
if ([options[UIApplicationOpenURLOptionsSourceApplicationKey] isEqualToString:@"com.tencent.xin"] && [url.absoluteString containsString:@"login"]) {
        [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }else{
        [[UMSocialManager defaultManager] handleOpenURL:url options:options];
    }
    return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容