iOS微信第三方登录

1.首先要到微信开发平台下载SDK导入工程中。根据微信提供的开发文档导入相应的库。这个步骤就省略了。大家移步到微信开放平台查看相关步骤。

2.这里有一个坑,微信官方文档中,需要你在AppDelegate.m中添加以下两个方法:

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{

return [WXApihandleOpenURL:url delegate:self] ;

}

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{

return[WXApihandleOpenURL:url delegate:self] ;

}


3.然而自从更新了iOS9之后。还需要添加以下这个方法,才能真正运行成功。否则都是失败的(这一步很重要)。

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options{

return[WXApihandleOpenURL:url delegate:self] ;

}

4.然后需要在微信登录button的点击方法中,添加这个方法:

#pragma mark--微信登录按钮点击

-(void)sendAuthRequest

{

//构造SendAuthReq结构体

SendAuthReq* req =[[SendAuthReqalloc]init];

req.scope=@"snsapi_userinfo";

req.state=@"123";

//第三方向微信终端发送一个SendAuthReq消息结构

[WXApisendReq:req];

}

5.点击button后会跳到微信授权界面,点击确定后。会在AppDelegate.m中调用以下这个方法 :

-(void)onResp:(BaseResp*)resp{

// 向微信请求授权后,得到响应结果

if([respisKindOfClass:[SendAuthRespclass]]) {

SendAuthResp*temp = (SendAuthResp*)resp;

AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];//一开始如果没设置这个属性,就会报错。所以这一步不能省略。

NSString*accessUrlStr = [NSStringstringWithFormat:@"%@/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",WX_BASE_URL,kWXappid,kWXAppSecret,temp.code];

[managerGET:accessUrlStrparameters:nilsuccess:^(AFHTTPRequestOperation*operation,idresponseObject) {

NSLog(@"请求access的response = %@", responseObject);

NSDictionary*accessDict = [NSDictionarydictionaryWithDictionary:responseObject];

NSString*accessToken = [accessDictobjectForKey:WX_ACCESS_TOKEN];

NSString*openID = [accessDictobjectForKey:WX_OPEN_ID];

NSString*refreshToken = [accessDictobjectForKey:WX_REFRESH_TOKEN];

// 本地持久化,以便access_token的使用、刷新或者持续

if(accessToken && ![accessTokenisEqualToString:@""] && openID && ![openIDisEqualToString:@""]) {

[[NSUserDefaultsstandardUserDefaults]setObject:accessTokenforKey:WX_ACCESS_TOKEN];

[[NSUserDefaultsstandardUserDefaults]setObject:openIDforKey:WX_OPEN_ID];

[[NSUserDefaultsstandardUserDefaults]setObject:refreshTokenforKey:WX_REFRESH_TOKEN];

[[NSUserDefaultsstandardUserDefaults]synchronize];// 命令直接同步到文件里,来避免数据的丢失}

[self wechatLoginByRequestForUserInfo];//获取到openid和nickname之后,执行的方法。这个方法就可以根据你们项目的需求来执行各自的操作了。

}failure:^(AFHTTPRequestOperation*operation,NSError*error) {

NSLog(@"获取access_token时出错 = %@", error);

}];

}

}


6.顺便说说我们项目的做法。我们获取到openid和nickname之后,将openid和nickname以键值对的方式保存在本地,这样再一次登录app的时候,就不用再一次使用第三方登录了。登录时,将这个两个参数post到服务器,服务器根据返回的参数创建新用户,返回登录成功。然后我们这边把返回的用户信息保存在本地。退出登录时,清除本地记录的openid和nickname。

本人菜鸟一枚,希望本文对同样是新手的大家有用,谢谢!

你可能感兴趣的:(iOS微信第三方登录)