一. 首先需要下载腾讯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登录的更多相关文章

  1. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

    第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...

  2. Android之第三方平台实现QQ登录和QQ分享

    目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含: 登录授权登录获取用户信息(昵称,头像,地址等) QQ分享给好友 ...

  3. dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录

    织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...

  4. 基于Vue、Springboot网站实现第三方登录之QQ登录,以及邮件发送

    基于Vue.Springboot实现第三方登录之QQ登录 前言 一.前提(准备) 二.QQ登录实现 1.前端 2.后端 1.application.yml 和工具类QQHttpClient 2.QQL ...

  5. 从零玩转第三方登录之QQ登录

    从零玩转第三方登录之QQ登录 前言 在真正开始对接之前,我们先来聊一聊后台的方案设计.既然是对接第三方登录,那就免不了如何将用户信息保存.首先需要明确一点的是,用户在第三方登录成功之后, 我们能拿到的 ...

  6. android实现第三方登录之QQ登录

    首先,当然是在腾讯开放平台(http://open.qq.com/)注册成为开发者,然后获取APP ID 1.下载SDK http://wiki.open.qq.com/wiki/mobile/SDK ...

  7. 第三方登录(QQ登录)开发流程详解

    原文:http://www.cnblogs.com/it-cen/p/4338202.html 近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑 ...

  8. (转)第三方登录(QQ登录)开发流程详解

    近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网(http://wiki.conne ...

  9. 第三方登录:QQ登录实现(OAuth2.0)

    一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...

随机推荐

  1. Widows下利用OpenSSL生成证书

    1.下载OpenSSL的windows版本 32位:openssl-1.0.2a-i386-win32.zip 64位:openssl-1.0.2a-x64_86-win64.zip 下载之后解压即可 ...

  2. awk 统计

    命令太多,记不住,组合起来用一把…..示例文件: 1 2 3 4 5 6 7 8 9 10 11 [root@lovedan test]# cat a.txt hello good world hel ...

  3. IP分段小记

    192.168.0.1 个人电脑:0.2-0.50 硬件开发板:0.51-0.100 机器人工控机:0.101-0.200 激光雷达:192.168.254.51~100 编码器板子:192.168. ...

  4. 构建伪Update服务器工具isr-evilgrade

    构建伪Update服务器工具isr-evilgrade   现在大部分软件都提供更新功能.软件一旦运行,就自动检查对应的Update服务器.如果发现新版本,就会提示用户,并进行下载和安装.而用户往往相 ...

  5. Android 桌面小部件

    1. 添加AppWidgetProvider 实际上就是个带有界面的BroadcastReceiver public class SimpleWidgetProvider extends AppWid ...

  6. PAT1001~1005AC代码

    晚上了,睡不着觉,做CF把,太累了,那就来几道乙级的编程小题吧. 1001.卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这 ...

  7. Spring异步任务处理,@Async的配置和使用

    本文转自http://blog.csdn.net/clementad/article/details/47403185 感谢作者 这个注解用于标注某个方法或某个类里面的所有方法都是需要异步处理的.被注 ...

  8. android toolbar 假标题居中

    <android.support.v7.widget.Toolbar android:id="@+id/toolbar_top" android:layout_height= ...

  9. AngularJS:实现动态添加输入控件功能

    功能要求如下:1.    点击加号可以增加输入框.2.    点击减号可以减少输入框.3.    当输入框只有一个的时候,不能再减少输入框.效果图如下:只有一个输入框有多个输入框 要实现这个功能,可以 ...

  10. drag-html

    <!doctype html><html><head><meta charset="UTF-8" /><title>Ca ...