iOS 第三方登录之 QQ登录
一. 首先需要下载腾讯qq登录所需的库,下载地址是http://open.qq.com/ 。
需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,将两者加入工程。
二.下面就来实现QQ第三方登录
1.声明属性,且viewcontroller实现TencentSessionDelegate
@interface LoginViewController :UIViewController<TencentSessionDelegate>
@property (nonatomic,strong)TencentOAuth *tencentOAuth;
@property (nonatomic,strong)NSMutableArray* permission;
//点击qq登录
- (IBAction)touchQQLoginButton:(id)sender;
@end
2.iOS中,如果iphone没有安装QQ客户端,当用qq进行第三方登录时会提示要安装qq,这样会影响app上架,
所以,应该先检测一下手机上时候安装了qq,没有安装就需要隐藏qq的第三方登录按钮。
//判断是否安装了qq
self.tencentOAuth = [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];
BOOL isInstallQQ = [TencentOAuthiphoneQQInstalled];
if (isInstallQQ ==NO) {
[self.QQButtonsetHidden:YES];
}
其中initWithAppId:gQQid中的gQQid,是申请的腾讯开放平台的appid。
3.使用qq第三方登录,大概需要三部:
1)获取认证
2)获取用户信息
3)登录
下面我们来单步分析
1)获取认证。比如点击了 使用qq登录按钮
#pragma mark ----------- 点击qq登录 ----------------
- (IBAction)touchQQLoginButton:(id)sender {
self.tencentOAuth = [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];
self.permission = [NSMutableArrayarrayWithObjects:@"get_user_info",@"get_simple_userinfo",nil];
[self.tencentOAuthauthorize:self.permissioninSafari:NO];
}
登录结束会调用delegate
#pragma mark --------- qq登录状态回调 ------
//登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。
- (void)tencentDidLogin
{
NSLog(@"qq登录完成");
if (_tencentOAuth.accessToken &&0 != [_tencentOAuth.accessTokenlength])
{
// 记录登录用户的OpenID、Token以及过期时间
_labelAccessToken.text = _tencentOAuth.accessToken;
MyNSLog(@"token===%@",[_tencentOAuthaccessToken] );
MyNSLog(@"openId===%@",[_tencentOAuthopenId]) ;//这个是用户的唯一id,使用它来登录自己的服务器
MyNSLog(@"appid === %@",[_tencentOAuthappId]);
[selfgetQQUserInfo];//自己实现的方法,得到用户信息,见下一步说明。
}
else{
_labelAccessToken.text = @"登录不成功没有获取accesstoken";
}
}
//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{
MyNSLog(@"非网络错误导致登录失败");
if (cancelled)
{
MyNSLog(@"用户取消登录操作");
}
else
{
}
}
//网络错误导致登录失败:
-(void)tencentDidNotNetWork
{
MyNSLog(@"网络错误导致登录失败:");
}
2)获取用户信息
#pragma mark ---------- 获取qq用户信息 ----
- (void)getQQUserInfo {
if(![_tencentOAuthgetUserInfo]){
MyNSLog(@"获取qq用户信息失败");
}
}
获取用户信息结束回调
#pragma mark -------- qq用户信息回调 -------
/**
* Called when the get_user_info has response.
*/
- (void)getUserInfoResponse:(APIResponse*) response {
if (response.retCode ==URLREQUEST_SUCCEED)
{
NSMutableString *str=[NSMutableStringstringWithFormat:@""];
for (id keyin response.jsonResponse) {
[strappendString: [NSStringstringWithFormat:@"%@:%@\n",key,[response.jsonResponseobjectForKey:key]]];
}
MyNSLog(@"%@",str);
NSString* url = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"figureurl_qq_2"]];
NSString* nickname = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"nickname"]];
if (NO_VALUE(url) ||NO_VALUE(nickname)) {
MyNSLog(@"获取qq用户信息失败");
}else{
NSNumber* typeQQ = [NSNumbernumberWithInteger:1];
[selflogin:self.openIDandNickname:nicknameandAvatar:url andType:typeQQ];//自己的登录函数
}
}
else
{
[selfshowHint:response.errorMsg];
}
}
3) 登录自己的服务器
[self login:self.openID andNickname:nickname andAvatar:url andType:typeQQ];//自己的登录函数
三.当从qq认证返回我们自己的app,需要在appdelegate中实现
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([url.host isEqualToString:@"qzapp"]) {
return [TencentOAuth HandleOpenURL:url];
}
return YES;
}
-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if ([url.host isEqualToString:@"qzapp"]) {
return [TencentOAuth HandleOpenURL:url];
}
}
注意事项:
1. 需要特别注意使用第三方登录对审核带来的影响,如果审核人员的设备未安装QQ,如果是跳转到下载微信和QQ的页面,可能会被拒绝。
2. app发布前,只有添加进测试帐号的帐号才能登录成功,否则会报错。
3. 开发完成后需要提交审核,否则只能允许100个测试账号进行登录。
文章如有错误,请指出,谢谢。
iOS 第三方登录之 QQ登录的更多相关文章
- 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...
- Android之第三方平台实现QQ登录和QQ分享
目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含: 登录授权登录获取用户信息(昵称,头像,地址等) QQ分享给好友 ...
- dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录
织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...
- 基于Vue、Springboot网站实现第三方登录之QQ登录,以及邮件发送
基于Vue.Springboot实现第三方登录之QQ登录 前言 一.前提(准备) 二.QQ登录实现 1.前端 2.后端 1.application.yml 和工具类QQHttpClient 2.QQL ...
- 从零玩转第三方登录之QQ登录
从零玩转第三方登录之QQ登录 前言 在真正开始对接之前,我们先来聊一聊后台的方案设计.既然是对接第三方登录,那就免不了如何将用户信息保存.首先需要明确一点的是,用户在第三方登录成功之后, 我们能拿到的 ...
- android实现第三方登录之QQ登录
首先,当然是在腾讯开放平台(http://open.qq.com/)注册成为开发者,然后获取APP ID 1.下载SDK http://wiki.open.qq.com/wiki/mobile/SDK ...
- 第三方登录(QQ登录)开发流程详解
原文:http://www.cnblogs.com/it-cen/p/4338202.html 近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑 ...
- (转)第三方登录(QQ登录)开发流程详解
近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网(http://wiki.conne ...
- 第三方登录:QQ登录实现(OAuth2.0)
一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...
随机推荐
- R语言实战读书笔记(八)回归
简单线性:用一个量化验的解释变量预测一个量化的响应变量 多项式:用一个量化的解决变量预测一个量化的响应变量,模型的关系是n阶多项式 多元线性:用两个或多个量化的解释变量预测一个量化的响应变量 多变量: ...
- L1-1. 出生年【STL放的位置】
L1-1. 出生年 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才 ...
- ASP.NET Core 依赖注入基本用法
ASP.NET Core 依赖注入 ASP.NET Core从框架层对依赖注入提供支持.也就是说,如果你不了解依赖注入,将很难适应 ASP.NET Core的开发模式.本文将介绍依赖注入的基本概念,并 ...
- SVG动画实践篇-字母切换
git: https://github.com/rainnaZR/svg-animations/tree/master/src/pages/step2/letter.change 说明 这个页面实现了 ...
- Mingw/Code::Block/wxWidgets 搭建
Mingw The MinGW project maintains and distributes a number of different core components and suppleme ...
- [反汇编练习] 160个CrackMe之031
[反汇编练习] 160个CrackMe之031. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- Chrome内核保存为mhtml(单网页)
在地址栏输入:chrome://flags 回车 然后Ctrl+f查找mhtml Tips: 如果网页图片看不太清可以CTRL+鼠标滚轮放大网页 如果系统原因以及其它因素可以下载:QQ浏览器(默认保 ...
- hdu 1548
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- js eval 解析字符串
//带变量的字符串var str = 'var a=1; var b=2;'; eval(str); alert(a+b);//结果 3: //数组字符串var arrStr = "[1,2 ...
- 可在 html5 游戏中使用的 js 工具库
可在 html5 游戏中使用的 js 工具库 作者: 木頭 时间: September 21, 2014 分类: Utilities,Game 使用 cocos2d-js 3.0 开发游戏项目两三个月 ...