这是本人写的第一篇文章,写的不好还望见谅!~
在做项目的时候,由于本人最先使用原生的微信集成第三方登录,测试是没有问题,后来由另外一个哥们集成了微信分享功能,他是使用的友盟集成的,最后导致测试的时候微信第三方登录很难完成(亲测好几次才有一次能够登录);
在delegate方法接收到微信登录回调,发现token,openID,refreshToken很多时候获取不到
if ([resp isKindOfClass:[SendAuthResp class]]) { //授权登录的类。
if (resp.errCode == 0) { //成功。
SendAuthResp *resp2 = (SendAuthResp *)resp;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];//请求
manager.responseSerializer = [AFHTTPResponseSerializer serializer];//响应
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json", @"text/json",@"text/plain", nil, nil];
//通过 appid secret 认证code . 来发送获取 access_token的请求(这里设置微信的appKey和appSecret)
[manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",URL_APPID,URL_SECRET,resp2.code] parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id responseObject) {
//获得access_token,然后根据access_token获取用户信息请求。
NSDictionary *accessDict = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSString *token = [accessDict objectForKey:WX_ACCESS_TOKEN];
NSString *openID = [accessDict objectForKey:WX_OPEN_ID];
NSString *refreshToken = [accessDict objectForKey:WX_REFRESH_TOKEN];
// 打印发现有时获取不到值,是由于多次设置微信的appKey和appSecret
NSLog(@"%@,===%@===,%@",token,openID,refreshToken);
// 本地持久化,以便access_token的使用、刷新或者持续
if (token && ![token isEqualToString:@""] && openID && ![openID isEqualToString:@""]) {
[[NSUserDefaults standardUserDefaults] setObject:token forKey:WX_ACCESS_TOKEN];
SLLog(@"%@",token);
[[NSUserDefaults standardUserDefaults] setObject:openID forKey:WX_OPEN_ID];
[[NSUserDefaults standardUserDefaults] setObject:refreshToken forKey:WX_REFRESH_TOKEN];
[[NSUserDefaults standardUserDefaults] synchronize]; // 命令直接同步到文件里,来避免数据的丢失
}
[self wechatLoginByRequestForUserInfo];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
SLLog(@"error %@",error.localizedFailureReason);
}];
通过调试发现,在友盟也做了相关操作:
设置微信的appKey和appSecret(重复代理里面设置)
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:URL_APPID appSecret:URL_SECRET redirectURL:@"http://www.xxx.cn/"];
原因是由于两个地方都做了设置微信的appKey和appSecret导致的;
解决方法:将友盟的设置微信的appKey和appSecret注释就可以了;
如果以后发现微信登录集成后不能成功登录可以试着查看是否重复注册appKey和appSecret !!!
写的不好,还望见谅!~