這是本人寫的第一篇文章,寫的不好還望見諒!~
在做項目的時候,由于本人最先使用原生的微信集成第三方登錄,測試是沒有問題,后來由另外一個哥們集成了微信分享功能,他是使用的友盟集成的,最后導致測試的時候微信第三方登錄很難完成(親測好幾次才有一次能夠登錄);
在delegate方法接收到微信登錄回調,發(fā)現(xiàn)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 . 來發(fā)送獲取 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棚壁,然后根據(jù)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];
// 打印發(fā)現(xiàn)有時獲取不到值,是由于多次設置微信的appKey和appSecret
NSLog(@"%@,===%@===,%@",token,openID,refreshToken);
// 本地持久化,以便access_token的使用袖外、刷新或者持續(xù)
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]; // 命令直接同步到文件里史隆,來避免數(shù)據(jù)的丟失
}
[self wechatLoginByRequestForUserInfo];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
SLLog(@"error %@",error.localizedFailureReason);
}];
通過調試發(fā)現(xiàn),在友盟也做了相關操作:
設置微信的appKey和appSecret(重復代理里面設置)
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:URL_APPID appSecret:URL_SECRET redirectURL:@"http://www.xxx.cn/"];
原因是由于兩個地方都做了設置微信的appKey和appSecret導致的;
解決方法:將友盟的設置微信的appKey和appSecret注釋就可以了;
如果以后發(fā)現(xiàn)微信登錄集成后不能成功登錄可以試著查看是否重復注冊appKey和appSecret !!!
寫的不好,還望見諒!~