项目地址 :  https://github.com/zhonggaorong/QQLoginDemo/tree/master

最新版本的qq登录实现步骤实现:

1. 首先,你需要去向腾讯申请账号。 地址:点击打开链接

2. 下载最新的SDK   地址: SDK下载

SDK内容如下:

1. doc: 为说明文档, 方法参数说明。

2.sample 这个是简单的demo

3. TencentOpenApi_IOS_Bundle.bundle   资源文件包

4. TencentOpenApi.framework     核心开发框架

接下来就进入正题:

1. 项目配置,手把手教学:

1. 新建一个工程。 
   2. 把TencentOpenApi.framework 和  TencentOpenApi_IOS_Bundle.bundle  拖入工程。 
   3. 配置项目。

3.1 添加依赖库:

3.2 在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”

3.3 URLScheme 配置:

3.4 针对ios9以后,需要添加白名单。

在info.plist文件中加入 LSApplicationQueriesSchemes

对应的info.plist 的source code 为

<key>LSApplicationQueriesSchemes</key><array><string>mqqapi</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqconnect</string><string>mqqopensdkdataline</string><string>mqqopensdkgrouptribeshare</string><string>mqqopensdkfriend</string><string>mqqopensdkapi</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqzoneopensdk</string><string>wtloginmqq</string><string>wtloginmqq2</string><string>mqqwpa</string><string>mqzone</string><string>mqzonev2</string><string>mqzoneshare</string><string>wtloginqzone</string><string>mqzonewx</string><string>mqzoneopensdkapiV2</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqzoneopensdk</string></array>

3.5  针对iOS9默认使用https,现在先还原成http请求方式。

在Info.plist中添加NSAppTransportSecurity类型Dictionary

NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

第一步:在plist中添加NSAppTransportSecurity项,此项为NSDictionary

第二步:在NSAppTransportSecurity下添加   NSAllowsArbitraryLoads类型为Boolean,value为YES

4. 开始码代码了, 最欢乐的时刻:

1. 在刚刚新建的项目中 appdelegate.m, 添加代码:

1.引入头文件 :

#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>

2. 并遵循代理

@interface AppDelegate ()<QQApiInterfaceDelegate>
@end

3. 在添加跳转的请求方法

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{/**处理由手Q唤起的跳转请求\param url 待处理的url跳转请求\param delegate 第三方应用用于处理来至QQ请求及响应的委托对象\return 跳转请求处理结果,YES表示成功处理,NO表示不支持的请求协议或处理失败*/[QQApiInterface handleOpenURL:url delegate:self];return [TencentOAuth HandleOpenURL:url];
}/**处理来至QQ的请求*/
- (void)onReq:(QQBaseReq *)req{NSLog(@" ----req %@",req);
}/**处理来至QQ的响应*/
- (void)onResp:(QQBaseResp *)resp{NSLog(@" ----resp %@",resp);
}/**处理QQ在线状态的回调*/
- (void)isOnlineResponse:(NSDictionary *)response{}

现在就是具体的登录controller.m了。

授权相关的字段

/** 发表一条说说到QQ空间(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_TOPIC;/** 发表一篇日志到QQ空间(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ONE_BLOG;/** 创建一个QQ空间相册(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ALBUM;/** 上传一张照片到QQ空间相册(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;/** 获取用户QQ空间相册列表(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;/** 同步分享到QQ空间、腾讯微博 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_SHARE;/** 验证是否认证空间粉丝 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_CHECK_PAGE_FANS;/** 获取登录用户自己的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;/** 获取其他用户的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;/** 获取会员用户基本信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_INFO;/** 获取会员用户详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_RICH_INFO;/** 获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_USER_INFO;/** 移动端获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_SIMPLE_USER_INFO;

直接上源码, 源码里面有注释,一看就明白了

//
//  ViewController.m
//  QQLoginDemo
//
//  Created by 张国荣 on 16/6/17.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//#import "ViewController.h"#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/TencentApiInterface.h>#define APP_ID @"你的appid"
@interface ViewController ()<TencentSessionDelegate>
{TencentOAuth *_tencentOAuth;NSMutableArray *_permissionArray;   //权限列表
}
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];
}- (IBAction)loginAction:(id)sender {_tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID andDelegate:self];//设置权限数据 , 具体的权限名,在sdkdef.h 文件中查看。_permissionArray = [NSMutableArray arrayWithObjects: kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];//登录操作[_tencentOAuth authorize:_permissionArray inSafari:NO];
}/*** 登录成功后的回调*/
- (void)tencentDidLogin{/** Access Token凭证,用于后续访问各开放接口 */if (_tencentOAuth.accessToken) {//获取用户信息。 调用这个方法后,qq的sdk会自动调用//- (void)getUserInfoResponse:(APIResponse*) response//这个方法就是 用户信息的回调方法。[_tencentOAuth getUserInfo];}else{NSLog(@"accessToken 没有获取成功");}}/*** 登录失败后的回调* \param cancelled 代表用户是否主动退出登录*/
- (void)tencentDidNotLogin:(BOOL)cancelled{if (cancelled) {NSLog(@" 用户点击取消按键,主动退出登录");}else{NSLog(@"其他原因, 导致登录失败");}
}/*** 登录时网络有问题的回调*/
- (void)tencentDidNotNetWork{NSLog(@"没有网络了, 怎么登录成功呢");
}/*** 因用户未授予相应权限而需要执行增量授权。在用户调用某个api接口时,如果服务器返回操作未被授权,则触发该回调协议接口,由第三方决定是否跳转到增量授权页面,让用户重新授权。* \param tencentOAuth 登录授权对象。* \param permissions 需增量授权的权限列表。* \return 是否仍然回调返回原始的api请求结果。* \note 不实现该协议接口则默认为不开启增量授权流程。若需要增量授权请调用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授权时用户可能会修改登录的帐号*/
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{// incrAuthWithPermissions是增量授权时需要调用的登录接口// permissions是需要增量授权的权限列表[tencentOAuth incrAuthWithPermissions:permissions];return NO; // 返回NO表明不需要再回传未授权API接口的原始请求结果;// 否则可以返回YES
}/*** [该逻辑未实现]因token失效而需要执行重新登录授权。在用户调用某个api接口时,如果服务器返回token失效,则触发该回调协议接口,由第三方决定是否跳转到登录授权页面,让用户重新授权。* \param tencentOAuth 登录授权对象。* \return 是否仍然回调返回原始的api请求结果。* \note 不实现该协议接口则默认为不开启重新登录授权流程。若需要重新登录授权请调用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登录授权时用户可能会修改登录的帐号*/
- (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{return YES;
}/*** 用户通过增量授权流程重新授权登录,token及有效期限等信息已被更新。* \param tencentOAuth token及有效期限等信息更新后的授权实例对象* \note 第三方应用需更新已保存的token及有效期限等信息。*/
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth{NSLog(@"增量授权完成");if (tencentOAuth.accessToken&& 0 != [tencentOAuth.accessToken length]){ // 在这里第三方应用需要更新自己维护的token及有效期限等信息// **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息** _labelAccessToken.text = tencentOAuth.accessToken;}else{NSLog(@"增量授权不成功,没有获取accesstoken");}}/*** 用户增量授权过程中因取消或网络问题导致授权失败* \param reason 授权失败原因,具体失败原因参见sdkdef.h文件中\ref UpdateFailType*/
- (void)tencentFailedUpdate:(UpdateFailType)reason{switch (reason){case kUpdateFailNetwork:{//            _labelTitle.text=@"增量授权失败,无网络连接,请设置网络";NSLog(@"增量授权失败,无网络连接,请设置网络");break;}case kUpdateFailUserCancel:{//            _labelTitle.text=@"增量授权失败,用户取消授权";NSLog(@"增量授权失败,用户取消授权");break;}case kUpdateFailUnknown:default:{NSLog(@"增量授权失败,未知错误");break;}}}/*** 获取用户个人信息回调* \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse* \remarks 正确返回示例: \snippet example/getUserInfoResponse.exp success*          错误返回示例: \snippet example/getUserInfoResponse.exp fail*/
- (void)getUserInfoResponse:(APIResponse*) response{NSLog(@" response %@",response);
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end

iOS开发之第三方登录QQ -- 史上最全最新第三方登录QQ方式实现相关推荐

  1. iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现

    相关资源地址: 本项目demo地址 :   https://github.com/zhonggaorong/weiboSDKDemo 最新SDK下载:  最新微博SDK 官网注册地址:点击打开链接 最 ...

  2. 大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...

  3. 对外汉语语料库有哪些_[转载]史上最全最新的语料库资源大全【对外汉语教学研究工具】...

    果断收藏!分享给好友!史上最全最新的语料库资源大全.本文持续更新,欢迎订阅期刊<对外汉语北京>以便获得最新通知! [期刊] International Journal of Corpus ...

  4. 魔域无法连接服务器或正在维护,史上最全魔域无法登录或登录超时原因与解决办法...

    本文成为今日优秀文章,获得270点可交易魔石的奖励 最近一段时间,老是听到玩家无法登录或登录超时的问题,官方给出的解释是电信和网通两大运营商串线了,还有就是新区人多的问题. 这些原因都是我们无法解决的 ...

  5. 史上最全最新前端面试题(不定期更新,有问题欢迎评论区对线)

    一阶段面试题: CSS浮动怎么理解的 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,也就是脱离文档流,所以文档的普通流中的块框表现得就像 ...

  6. SpringBoot+SpringSecurity+JWT整合实现单点登录SSO史上最全详解

    作者:波波烤鸭 blog.csdn.net/qq_38526573/article/details/103409430 一.什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是 ...

  7. 应该是史上最全最新Java和Android面试题目(自己总结和收集的)

    Android面试题目 Java 基础 int占用几个字节 讲一下常见编码方式? UTF-8编码下中文占几个字节 int和Interger的区别 int.char.long各占多少字节数 string ...

  8. 史上最全最新微信小程序自动化教程

    背景 微信小程序作为现在流行的一种应用载体,很多小伙伴都有对其做自动化测试的需求,由于腾讯系QQ.微信等是基于腾讯自研X5内核,不是谷歌原生webview,所以调试会有些许差异(现在很多app产品也开 ...

  9. Java、eclipse、html、mysql 基础常见英语词汇及快捷键(2018史上最全最新最有用) 萌芽call - CSDN博客园

    第一章: JDK java开发工具包 Jvm java虚拟机 Javac 编译命令 Java 高级编程语言 Classpath 类路径 Version 版本 author 作者 eclipse 开发工 ...

最新文章

  1. 如何高效的编写Verlog HDL——菜鸟版
  2. 触摸板库tslib的编译和配置
  3. java之ThreadLocal简单使用总结
  4. python功能函数_Python-功能函数的使用
  5. java vm_Java VM –提防YoungGen空间
  6. 在JDK 8中可通过反射获得构造函数/方法参数元数据
  7. python数据结构的列表_Python自带数据结构 列表(list)
  8. eclipse下开发简单的Java Web Service
  9. Python实战之子进程
  10. java 构造方法_Java构造方法和子类构造方法
  11. ExtJS 4无限制滚动条的Grid
  12. [2018.10.11 T1] 锻造
  13. 通达信服务器在哪个文件里,通达信“指标模块”存放在哪个文件夹里
  14. html5游戏毕业答辩ppt,毕业论文答辩ppt格式(超详细解释)
  15. Cadence16.6 最新83号补丁下载-Hotfix_SPB16.60.083_wint_1of1.exe
  16. 你真的了解性能压测中的SLA吗?
  17. 我如何使用smartwatch传感器限制covid 19感染
  18. bzoj3029 守卫者的挑战
  19. 第十三届蓝桥杯大赛软件赛省赛第二场(Java 大学A组)
  20. 微信引流常用几大技巧

热门文章

  1. Yetiarnold for maya一键安装部署
  2. java计算机毕业设计记事网页源码+mysql数据库+系统+lw文档+部署
  3. 12 条实用的 zypper 命令范例
  4. 羽毛球混双基本站位和战术
  5. mysql修改数据库日期_修改sql数据库日期
  6. Dataguard搭建问题小记
  7. vc 删除目录或文件与目录下文件
  8. java文件下载文件损坏_Springboot实现文件下载,文件下载后损坏
  9. 微信小程序云开发之云函数的调用
  10. 全网最全解决这idea乱码问题