这篇文章主要为大家详细介绍了iOS微信第三方登录实现过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了iOS微信第三方登录,供大家参考,具体内容如下
一、准备工作
1、到微信开放平台注册成开发者,获取appid
2、导入WeChatConnection.framework
3、配置URL Schemes 输入appid 例如wx29ce0f21ea982cb8
二、配置AppDelegate.m
1、 注册微信
//微信登陆
[WXApi registerApp:WeiXin_AppId withDescription:@"weixin"];
2、设置函数
//把代理设置到登陆视图中
- (BOOL)application:(UIApplication *)application
handleOpenURL:(NSURL *)url
{
return [WXApi handleOpenURL:url delegate:[LoginViewController shareLogin]];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [WXApi handleOpenURL:url delegate:[LoginViewController shareLogin]];
}
三、登陆页代码
1、微信登录授权比较复杂,相比QQ,新浪多了几步,简单说就是需要三步,第一步,获取code,这个用来获取token,第二步,就是带上code获取token,第三步,根据第二步获取的token和openid来获取用户的相关信息
2、
第一步:获取code
-(void)weiXinLogin
{
SendAuthReq* req =[[SendAuthReq alloc] init];
req.scope = @"snsapi_userinfo,snsapi_base";
req.state = @"0744" ;
[WXApi sendReq:req];
}
-(void)onReq:(BaseReq *)req
{
NSLog(@"呵呵");
[self msgHint:@"登陆失败"];
}
-(void)onResp:(BaseResp *)resp
{
SendAuthResp* sender = (SendAuthResp*)resp;
NSString* code = sender.code;
NSLog(@"啦啦 code = %@",code);
MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"收取用户信息..";
[self getAccess_tokenWithCode:code];
}
第二步 获取token
-(void)getAccess_tokenWithCode:(NSString*)myCode
{
//https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",kWXAPP_ID,kWXAPP_SECRET,myCode];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString* token = [dic objectForKey:@"access_token"];
NSString* openid = [dic objectForKey:@"openid"];
[self getUserInfoWithToken:token openId:openid];
NSLog(@"token = %@",token);
NSLog(@"openid = %@",openid);
}
});
});
}
第三步:获取用户信息
-(void)getUserInfoWithToken:(NSString*)myToken openId:(NSString*)myOpenId
{
// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",myToken,myOpenId];
NSLog(@"infoUrl = %@",url);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString* nickName = [dic objectForKey:@"nickname"];
NSString* wxHeadImgUrl = [dic objectForKey:@"headimgurl"];
NSLog(@"nickName = %@",nickName);
NSLog(@"headImg = %@",wxHeadImgUrl);
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:ON forKey:LogState];
[userDefaults setObject:ThirdFoudationLogin forKey:LogType];
[userDefaults setObject:nickName forKey:LoginName];
[userDefaults setObject:wxHeadImgUrl forKey:UserHeaderPath];
[userDefaults synchronize];
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
[self msgHint:@"微信登陆成功"];
[self popView];
}
});
});
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
织梦狗教程
本文标题为:iOS微信第三方登录实例
基础教程推荐
猜你喜欢
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- Android多返回栈技术 2023-04-15
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- Android中的webview监听每次URL变化实例 2023-01-23
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- android studio按钮监听的5种方法实例详解 2023-01-12
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- Flutter手势密码的实现示例(附demo) 2023-04-11
