一. 首先需要下载腾讯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个测试账号进行登录。

文章如有错误,请指出,谢谢。

转载于:https://www.cnblogs.com/fendou0320/p/5262235.html

iOS 第三方登录之 QQ登录相关推荐

  1. flutter在IOS上的登录实现——QQ登录、微信登录、自动识别手机号一键登录、apple登录

    flutter在IOS上的登录实现--QQ登录.微信登录.自动识别手机号一键登录.apple登录 一.QQ登录 使用的第三方库: 具体操作方法: 1.配置 Universal Links 2.QQ互联 ...

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

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

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

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

  4. Android 和 iOS分别用同一个 QQ登录获取到的openid 不一致的问题

    Android 和 iOS分别用同一个 QQ登录获取到的openid 不一致的问题: QQ登录时无法获取唯一的 UID 或openID, 不同设备获取到的不一致. 咨询腾讯客服得知一下结果: 现在打通 ...

  5. 美多商城项目之用户登录:账号登录、QQ登录

    一.账号登录 1.1 用户名登录 1. 用户名登录逻辑分析 2. 用户名登录接口设计 1.请求方式 选项 方案 请求方法 POST 请求地址 /login/ 2.请求参数:表单 参数名 类型 是否必传 ...

  6. uniapp实现微信登录或者QQ登录

    uniapp实现微信登录或者QQ登录 无论是哪种登录, 都要用到uni.login 一. 获取服务供应商 在实现登录前,先查看一下可以使用哪种方式登录. 在APP平台, 可用的服务商, 是打包环境中配 ...

  7. 商城项目---day04---账号登录和QQ登录

    一:用户名登录和用户名展示: # 用户名登陆接口实现 class LoginView(View):def post(self, request):data = json.loads(request.b ...

  8. PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑

    前言 绝大多数网站都集成了第三方登录,降低了注册门槛,增强了用户体验.最近看了看 QQ 互联上 QQ 登录的接口文档.接入 QQ 登录的一般流程是这样的:先申请开发者 -> 然后创建应用(拿到一 ...

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

    一.准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 申请appid和appkey的用途 appid :应用的唯一标 ...

最新文章

  1. 神经网络要从原子抓起:原来白花花的银子才是神经芯片的未来
  2. 高效整洁CSS代码原则 (下)
  3. wxWidgets:wxGenericProgressDialog类用法
  4. Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问
  5. centos directory server
  6. ES组件elasticsearch-head报错 npm ERR! Please include the following file with any support request
  7. Symantec Backup Exec 2014 备份Exchange 2013之四设备初始化
  8. paip.使用泛型时未能找到类型或命名空间名称“T
  9. 基于单片机的人体健康检测系统
  10. SCI期刊分区-JCR分区 中科院分区
  11. 一篇短文让你彻底理解什么是串口通信
  12. CIR 工业自动化雷达
  13. 【认识AI:人工智能如何赋能商业】【08】通用人工智能应用—智能机器人
  14. Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
  15. 小米Q1业绩:总营收769亿元,手机稳居全球前三
  16. 传奇微端大带宽服务器如何选择
  17. mysql5.1.40.jrp_1.原生态JDBC编程中的问题总结
  18. TOPSIS算法(优劣解距离法)的使用举例与matlab实现
  19. 专注UI——实用技术:模糊搜索
  20. 测试工程师mysql数据库基础操作之DQL 数据查询篇

热门文章

  1. html网页加密最终版,【原】记一次加密网页html的研究
  2. Linux运维必备的40个命令总结(值得收藏)
  3. 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
  4. 动画 制作_您希望制作的10个醒目的徽标动画
  5. Python简单试题3
  6. Service Mesh所应对的8项挑战 1
  7. jvm系列(八):jvm知识点总览
  8. Boostrap ZURB Foundation —— Web开发前端框架
  9. (转)svn检出的时候报 Unable to connect to a repository at URL错误
  10. BGP聚合as-set advertise-map