分别嵌入 新浪微博、QQ、微信 做第三方授权登录 获取到头像 昵称等信息
下面提到的这三种 授权登录 是分别嵌入,不是 share sdk 或者友盟 其它的。
一、下载sdk 地址
1.新浪微博 新浪微博SDK 下载
2.QQ QQ SDK 下载
3.微信 微信SDK
二、代码编写
怎么嵌入 导入库,配置key 那些就不说。
在Applegate 里面
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{return [WXApi handleOpenURL:url delegate:(id <WXApiDelegate>) self] | return [ WeiboSDK handleOpenURL:url delegate:(id <WeiboSDKDelegate>) self]|return [TencentOAuth HandleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{return [ WeiboSDK handleOpenURL:url delegate:(id <WeiboSDKDelegate>) self ]|[WXApi handleOpenURL:url delegate:(id <WXApiDelegate>) self]|[TencentOAuth HandleOpenURL:url];
}
(1)新浪微博
首先利用 新浪微博提供的对象 调用起
WBAuthorizeRequest *request = [WBAuthorizeRequest request];request.redirectURI = kRedirectURI;request.scope = @"all";request.userInfo = @{@"myKey": @"myValue"};[WeiboSDK sendRequest:request];
kRedirectURL 是你在新浪微博 申请的时候 填写的 url
当我们授权成功之后会在这个 delegate 里面返回token 和 openId 等信息
//调用起成功之后会在这个方法 能获取到 token 和 openId 等信息
-(void)didReceiveWeiboResponse:(WBBaseResponse *)response
{APP_DELEGATE.loginVC = nil;if ([response isKindOfClass:WBAuthorizeResponse.class]){if ((int)response.statusCode == 0){NSString *toke = [(WBAuthorizeResponse *)response userID];NSString *openId = [(WBAuthorizeResponse *)response accessToken];[WBHttpRequest requestWithAccessToken:toke url:@"https://api.weibo.com/2/users/show.json" httpMethod:@"GET" params:[NSDictionary dictionaryWithObject:openId forKey:@"uid"] delegate:(id)self withTag:@"hello_xixi"];}}
}
然后当我们 用token 和 openId 就可以获取到一些 基本的信息了
- (void)request:(WBHttpRequest *)request didFinishLoadingWithDataResult:(NSData *)data
{NSDictionary *content = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//转换数据格式NSLog(@"%@",content); //这里会返回 一些Base Info
}
还有提供了一些其它的 delegate 方法 用于判断 基本看名字就知道什么回事了
- (void)request:(WBHttpRequest *)request didReceiveResponse:(NSURLResponse *)response
{NSLog(@"%@",response);
}
- (void)request:(WBHttpRequest *)request didFinishLoadingWithResult:(NSString *)result
{NSLog(@"%@",result);
}- (void)request:(WBHttpRequest *)request didFailWithError:(NSError *)error
{NSLog(@"%@",error);
}
跟着后面就可以拿着 这些基本的信息去根据业务去做一些操作
新浪微博 end
--------------------------------------------我是分割线--------------------------------------------
(2)QQ
首先第一步 我们要用 QQ 提供的对象 调用 QQ客户端
//这个key 有很多 可以根据自己需要去 加入数组里面NSArray* permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_USER_INFO,kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];_tencentOAuth = [[TencentOAuth alloc] initWithAppId:qAppKey andDelegate:(id)self];[_tencentOAuth authorize:permissions];
其中的qAppKey 是在申请的时候 有提供的key
跟着就会在 delegate 里面 获取到 token 和openId
- (void)tencentDidLogin
{if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]){//成功 之后可以调用 getUserInfo[_tencentOAuth getUserInfo];}else{//失败}
}
成功之后 就可以 继续调用 getUserInfo 这个方法了 ,一看方法名就知道是干嘛了
那么 调用成功之后会在 下面这个 delegate 方法里面放回
-(void)getUserInfoResponse:(APIResponse *)response
{NSLog(@"%@",response);NSLog(@"%@",response.jsonResponse);//这里response 有User Base Info
}
还有一些其它相关的方法 也列出来
- (void)tencentDidNotLogin:(BOOL)cancelled
{if (cancelled){NSLog(@"取消登录");}else{NSLog(@"登录失败");}
}- (void)tencentDidNotNetWork
{NSLog(@"无网络连接,请设置网络");
}- (void)tencentDidLogout
{NSLog(@"成功退出登陆");
}
QQ end
--------------------------------------------我是分割线--------------------------------------------
(3) 微信
微信要获取token 和 openId 跟 新浪微博和QQ 有点区别,它是首先 获取一个code ,然后跟着这个coed 才能获取到 token 和 openId
首先 调用起 微信客户端
SendAuthReq *req = [[SendAuthReq alloc] init];req.scope = @"snsapi_userinfo,snsapi_base"; // 跟QQ 一样根据自己需要req.state = wAppState;req.openID = wAppKey;[WXApi sendReq:req];
授权回来之后会在 代理方法里面获取到code
- (void)onResp:(BaseResp *)resp
{if (resp.errCode == 0){NSLog(@"%@",resp);if ([resp isKindOfClass:[SendAuthResp class]]){SendAuthResp *sr = (SendAuthResp *)resp;NSLog(@"%@",sr.code);[self getAccess_token:sr.code];}}
}
要加上类型判断 因为 分享 也会回调这个方法,所以要判断对象类型
那么获取到code 之后我们可以根据 提供的url 来获取到token和openId
-(void)getAccessToken:(NSString *)code
{NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",wAppKey,wAppSecret,code];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];NSLog(@"%@",dic);NSString *token = [dic objectForKey:@"access_token"];NSString *openId = [dic objectForKey:@"openid"];[self getUserInfo:token andOpenId:openId];}});});
}
有了token 和 openId 那么也能够获取到 User Base Info
-(void) getUserInfo:(NSString *)tokenArg andOpenId:(NSString *)openIdArg
{NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",self.access_token,self.openid];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];NSLog(@"%@",dic);}});});
}
微信 end
--------------------------------------------------------------
三、总结
1.QQ 和 新浪微博的 SDK 写法 差不多,都是授权回来之后就能够获取到 token 和 openId
而 微信 得先获取到一个code 才能获取 token 和 openId.
2.QQ 和 新浪微博 有提供 代理方法和对象 做了数据封装,而微信提供一个url 让开发者自己拼接url ,自己定义方法。(个人比较喜欢 微信的做法)
>>>>>> 补充 2019 - 02 - 26 <<<<<<<<<
最近使用微信的SDK 登录, 原因是 不想把微信的 AppSecret 放在APP端,理由是因为安卓容易被破解,导致AppSecret 流出去。
但是方式在上面 文章的基础进行了一些改进。
1、逻辑大概是 由APP 拉起微信授权,授权成功之后 将code 传到服务端,然后服务端做获取 accessToken 和 openId , 然后再获取相关的userInfo 信息,至于后面的绑定逻辑怎么处理就看 各自的业务了。
2、一脸天真的 调用了 [WXApi isWXAppInstalled] 返回 flase , 百思不得其解, 后面发现是 想使用 WXApi 这个类,必须先 注册
[WXApi registerApp:WeChat_AppID];
分别嵌入 新浪微博、QQ、微信 做第三方授权登录 获取到头像 昵称等信息相关推荐
- 微信小程序——按钮登录获取用户头像昵称、不需要获取权限就能显示头像和昵称、获取手机号(云端)
1.登录获取用户头像昵称 代码 app.js App({globalData: {userInfo: null},onLaunch() {} }) . . . index.js const app = ...
- 微信小程序授权登录获取用户头像和昵称时得到微信用户,记录getUserInfo转变为getUserProfile的使用修改
首先,在微信官方更新授权操作之前,我们一直使用getUserInfo来获取微信用户的头像和昵称以及openid,这个可以参考我的上一篇博客(使用getUserInfo获取用户头像),但是微信官方弃用g ...
- 微信小程序授权登录获取用户名和昵称
微信授权官方文档 登录流程时序: 这里我是用微信开发者工具写的前端 login.wxml代码: <view class="userinfo"><block wx: ...
- 最新版微信小程序授权登录(自定义头像昵称)
根据官方微信小程序开发关于登录授权API的调整,自 2022年10月25日起有关API接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 "微信用户".(如下图所示) 那我 ...
- 微信小程序授权登录+获取手机号
微信小程序授权登录+获取手机号 一.官方文档背景: 小程序登录的链接: 微信小程序获取手机号的链接: 二.微信小程序授权登录+获取手机号 1.简单说明官方文档的操作:先授权登录后拿手机号 2.前端代码 ...
- Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息
引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...
- 微信支付宝双端兼容获取手机号头像昵称
微信支付宝双端兼容获取手机号头像昵称 1. 页面效果 参考上一篇的 微信小程序获取用户头像昵称手机号最新版 2. 授权手机号弹窗 <u-modal v-model="showAutho ...
- 微信小程序授权登录获取用户信息详解
今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...
- 微信小程序授权登录获取手机号,偶尔出现41003问题
最近做微信授权登录获取手机号有时会出现41003问题,研究半天网上查了不少资料,梳理下过程: 从文档可知主要是wx.login()获取code顺序问题 <button class="b ...
最新文章
- Khronos 在GDC上的信息汇总:Vulkan,OpenXR,WebGL,glTF
- jquery的$.extent()方法的总结
- VTK:可视化之MultipleRenderWindows
- 数据归一化 - MinMaxScaler()/MaxAbsScaler() - Python代码
- Spring 5 新功能:函数式 Web 框架
- Python socket编程模拟最简单的HTTP响应
- iphone 如何卸载xcode4.2
- 同时安装vs2005团队开发版和sql 2005企业版
- android cs bs 架构,BS架构与CS架构的区别
- C/C++程序员工作面试的秘密
- concat,ucase/lcase,left/right,length,replace
- 如何将ipynb文件转换转换为py文件?
- Docker基础认识与docker安装以及环境配置
- python爬虫(五):博客spider
- 飞机打扭来扭去的靶子
- Channel closed; cannot ack/nack
- php-fpm的重启方法
- 【Discuz】原系统进入论坛自动注册并进行登录
- TTO热转印打码机色带的故障与维护技巧
- 互联网架构为什么要做服务化(Service)