由于公司需要 微信登录使用的微信官方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;
}