转载自 iOS_developer_zhong

1. 申请腾讯开发账号。 地址:点击打开链接

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

SDK内容如下:

1.sample 这个是简单的demo

2. TencentOpenApi_IOS_Bundle.bundle   资源文件包

3. 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 为

[objc] view plaincopy
  1. <key>LSApplicationQueriesSchemes</key>
  2. <array>
  3. <string>mqqapi</string>
  4. <string>mqq</string>
  5. <string>mqqOpensdkSSoLogin</string>
  6. <string>mqqconnect</string>
  7. <string>mqqopensdkdataline</string>
  8. <string>mqqopensdkgrouptribeshare</string>
  9. <string>mqqopensdkfriend</string>
  10. <string>mqqopensdkapi</string>
  11. <string>mqqopensdkapiV2</string>
  12. <string>mqqopensdkapiV3</string>
  13. <string>mqzoneopensdk</string>
  14. <string>wtloginmqq</string>
  15. <string>wtloginmqq2</string>
  16. <string>mqqwpa</string>
  17. <string>mqzone</string>
  18. <string>mqzonev2</string>
  19. <string>mqzoneshare</string>
  20. <string>wtloginqzone</string>
  21. <string>mqzonewx</string>
  22. <string>mqzoneopensdkapiV2</string>
  23. <string>mqzoneopensdkapi19</string>
  24. <string>mqzoneopensdkapi</string>
  25. <string>mqzoneopensdk</string>
  26. </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.引入头文件 :

[objc] view plaincopy
  1. #import <TencentOpenAPI/QQApiInterface.h>
  2. #import <TencentOpenAPI/TencentOAuth.h>

2. 并遵循代理

[objc] view plaincopy
  1. @interface AppDelegate ()<QQApiInterfaceDelegate>
  2. @end

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

[objc] view plaincopy
  1. -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
  2. /**
  3. 处理由手Q唤起的跳转请求
  4. \param url 待处理的url跳转请求
  5. \param delegate 第三方应用用于处理来至QQ请求及响应的委托对象
  6. \return 跳转请求处理结果,YES表示成功处理,NO表示不支持的请求协议或处理失败
  7. */
  8. [QQApiInterface handleOpenURL:url delegate:self];
  9. return [TencentOAuth HandleOpenURL:url];
  10. }
  11. /**
  12. 处理来至QQ的请求
  13. */
  14. - (void)onReq:(QQBaseReq *)req{
  15. NSLog(@" ----req %@",req);
  16. }
  17. /**
  18. 处理来至QQ的响应
  19. */
  20. - (void)onResp:(QQBaseResp *)resp{
  21. NSLog(@" ----resp %@",resp);
  22. }
  23. /**
  24. 处理QQ在线状态的回调
  25. */
  26. - (void)isOnlineResponse:(NSDictionary *)response{
  27. }

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

授权相关的字段

[objc] view plaincopy
  1. /** 发表一条说说到QQ空间(<b>需要申请权限</b>) */
  2. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_TOPIC;
  3. /** 发表一篇日志到QQ空间(<b>需要申请权限</b>) */
  4. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ONE_BLOG;
  5. /** 创建一个QQ空间相册(<b>需要申请权限</b>) */
  6. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ALBUM;
  7. /** 上传一张照片到QQ空间相册(<b>需要申请权限</b>) */
  8. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;
  9. /** 获取用户QQ空间相册列表(<b>需要申请权限</b>) */
  10. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;
  11. /** 同步分享到QQ空间、腾讯微博 */
  12. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_SHARE;
  13. /** 验证是否认证空间粉丝 */
  14. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_CHECK_PAGE_FANS;
  15. /** 获取登录用户自己的详细信息 */
  16. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;
  17. /** 获取其他用户的详细信息 */
  18. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;
  19. /** 获取会员用户基本信息 */
  20. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_INFO;
  21. /** 获取会员用户详细信息 */
  22. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_RICH_INFO;
  23. /** 获取用户信息 */
  24. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_USER_INFO;
  25. /** 移动端获取用户信息 */
  26. FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_SIMPLE_USER_INFO;

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

[objc] view plaincopy
  1. //
  2. //  ViewController.m
  3. //  QQLoginDemo
  4. //
  5. //  Created by 张国荣 on 16/6/17.
  6. //  Copyright © 2016年 BateOrganization. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. #import <TencentOpenAPI/TencentOAuth.h>
  10. #import <TencentOpenAPI/TencentApiInterface.h>
  11. #define APP_ID @"你的appid"
  12. @interface ViewController ()<TencentSessionDelegate>
  13. {
  14. TencentOAuth *_tencentOAuth;
  15. NSMutableArray *_permissionArray;   //权限列表
  16. }
  17. @end
  18. @implementation ViewController
  19. - (void)viewDidLoad {
  20. [super viewDidLoad];
  21. self.view.backgroundColor = [UIColor whiteColor];
  22. }
  23. - (IBAction)loginAction:(id)sender {
  24. _tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID andDelegate:self];
  25. //设置权限数据 , 具体的权限名,在sdkdef.h 文件中查看。
  26. _permissionArray = [NSMutableArray arrayWithObjects: kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];
  27. //登录操作
  28. [_tencentOAuth authorize:_permissionArray inSafari:NO];
  29. }
  30. /**
  31. * 登录成功后的回调
  32. */
  33. - (void)tencentDidLogin{
  34. /** Access Token凭证,用于后续访问各开放接口 */
  35. if (_tencentOAuth.accessToken) {
  36. //获取用户信息。 调用这个方法后,qq的sdk会自动调用
  37. //- (void)getUserInfoResponse:(APIResponse*) response
  38. //这个方法就是 用户信息的回调方法。
  39. [_tencentOAuth getUserInfo];
  40. }else{
  41. NSLog(@"accessToken 没有获取成功");
  42. }
  43. }
  44. /**
  45. * 登录失败后的回调
  46. * \param cancelled 代表用户是否主动退出登录
  47. */
  48. - (void)tencentDidNotLogin:(BOOL)cancelled{
  49. if (cancelled) {
  50. NSLog(@" 用户点击取消按键,主动退出登录");
  51. }else{
  52. NSLog(@"其他原因, 导致登录失败");
  53. }
  54. }
  55. /**
  56. * 登录时网络有问题的回调
  57. */
  58. - (void)tencentDidNotNetWork{
  59. NSLog(@"没有网络了, 怎么登录成功呢");
  60. }
  61. /**
  62. * 因用户未授予相应权限而需要执行增量授权。在用户调用某个api接口时,如果服务器返回操作未被授权,则触发该回调协议接口,由第三方决定是否跳转到增量授权页面,让用户重新授权。
  63. * \param tencentOAuth 登录授权对象。
  64. * \param permissions 需增量授权的权限列表。
  65. * \return 是否仍然回调返回原始的api请求结果。
  66. * \note 不实现该协议接口则默认为不开启增量授权流程。若需要增量授权请调用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授权时用户可能会修改登录的帐号
  67. */
  68. - (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{
  69. // incrAuthWithPermissions是增量授权时需要调用的登录接口
  70. // permissions是需要增量授权的权限列表
  71. [tencentOAuth incrAuthWithPermissions:permissions];
  72. return NO; // 返回NO表明不需要再回传未授权API接口的原始请求结果;
  73. // 否则可以返回YES
  74. }
  75. /**
  76. * [该逻辑未实现]因token失效而需要执行重新登录授权。在用户调用某个api接口时,如果服务器返回token失效,则触发该回调协议接口,由第三方决定是否跳转到登录授权页面,让用户重新授权。
  77. * \param tencentOAuth 登录授权对象。
  78. * \return 是否仍然回调返回原始的api请求结果。
  79. * \note 不实现该协议接口则默认为不开启重新登录授权流程。若需要重新登录授权请调用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登录授权时用户可能会修改登录的帐号
  80. */
  81. - (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{
  82. return YES;
  83. }
  84. /**
  85. * 用户通过增量授权流程重新授权登录,token及有效期限等信息已被更新。
  86. * \param tencentOAuth token及有效期限等信息更新后的授权实例对象
  87. * \note 第三方应用需更新已保存的token及有效期限等信息。
  88. */
  89. - (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth{
  90. NSLog(@"增量授权完成");
  91. if (tencentOAuth.accessToken
  92. && 0 != [tencentOAuth.accessToken length])
  93. { // 在这里第三方应用需要更新自己维护的token及有效期限等信息
  94. // **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息** _labelAccessToken.text = tencentOAuth.accessToken;
  95. }
  96. else
  97. {
  98. NSLog(@"增量授权不成功,没有获取accesstoken");
  99. }
  100. }
  101. /**
  102. * 用户增量授权过程中因取消或网络问题导致授权失败
  103. * \param reason 授权失败原因,具体失败原因参见sdkdef.h文件中\ref UpdateFailType
  104. */
  105. - (void)tencentFailedUpdate:(UpdateFailType)reason{
  106. switch (reason)
  107. {
  108. case kUpdateFailNetwork:
  109. {
  110. //            _labelTitle.text=@"增量授权失败,无网络连接,请设置网络";
  111. NSLog(@"增量授权失败,无网络连接,请设置网络");
  112. break;
  113. }
  114. case kUpdateFailUserCancel:
  115. {
  116. //            _labelTitle.text=@"增量授权失败,用户取消授权";
  117. NSLog(@"增量授权失败,用户取消授权");
  118. break;
  119. }
  120. case kUpdateFailUnknown:
  121. default:
  122. {
  123. NSLog(@"增量授权失败,未知错误");
  124. break;
  125. }
  126. }
  127. }
  128. /**
  129. * 获取用户个人信息回调
  130. * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
  131. * \remarks 正确返回示例: \snippet example/getUserInfoResponse.exp success
  132. *          错误返回示例: \snippet example/getUserInfoResponse.exp fail
  133. */
  134. - (void)getUserInfoResponse:(APIResponse*) response{
  135. NSLog(@" response %@",response);
  136. }
  137. - (void)didReceiveMemoryWarning {
  138. [super didReceiveMemoryWarning];
  139. // Dispose of any resources that can be recreated.
  140. }
  141. @end

[转载]iOS开发之第三方登录QQ相关推荐

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

    项目地址 :  https://github.com/zhonggaorong/QQLoginDemo/tree/master 最新版本的qq登录实现步骤实现: 1. 首先,你需要去向腾讯申请账号. ...

  2. [共享]iOS开发系列--Swift语言

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发系列--Swift语言 概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服 ...

  3. iOS开发-Umeng第三方登录-个人整理

    官方网址: http://dev.umeng.com/social/ios/operation#2 一.注册友盟账号 登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey. http://w ...

  4. [分享]iOS开发-UI篇:CAlayer层的属性

    iOS开发UI篇-CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  5. [分享]iOS开发 - 网络总结

    基本概念 客户端:client 服务器:server 请求:request 响应:response 过程 客户端 -> 发送请求 -> 服务器(连接数据库) 服务器 -> 发送响应 ...

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

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

  7. [分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果

    首先说一下思路: 想要达到底部控件随着键盘的弹出而上移的效果,那么我们必然需要的到键盘在弹出时的高度,以及原点坐标. 说白了我们的大致思路就是,用view的高度-键盘弹出时的高度,得到的值就是底部控件 ...

  8. [分享]iOS开发-如何使用tabBarController

    由于难度不大,直接上代码了,看一遍基本就明白思路了 1.创建一个tabBarViewController .m文件 #import "SSTabBarViewController.h&quo ...

  9. [分享]iOS开发-实现UILabel显示出不同颜色并且某一部分产生下划线的效果 ...

    效果图: @interface XSRecommendedPrivilegeViewController () @property (weak, nonatomic) IBOutlet UIButto ...

最新文章

  1. 详解Android Handler的使用
  2. Exp5 MSF基础应用 20164309 欧阳彧骁
  3. 阿里云支持超级账本最新版 其区块链解决方案进入商用阶段
  4. (2)FPGA面试题竞争与冒险
  5. 电子元器件从入门到精通pdf_电子元件入门基础,常用电子元器件详解大全作用-涨知识必读...
  6. apache的日志切割
  7. 帆软Tab控件与控制组件隐藏的异同点
  8. 学习【新版的】韦东山嵌入式_day01
  9. mathtype安装教程
  10. A星寻路 A星算法优化
  11. word流程图怎么使箭头对齐_word 流程图 怎么把箭头对整齐啊?
  12. 怎么批量查询银行卡号发卡行等信息?
  13. oracle语句怎么查工作日,SQL查询工作日 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...
  14. 虚拟机win7 DNS 不可用
  15. (4.3C)神奇的口袋
  16. 如何测试WizFi210的”串口转无线”功能?
  17. 知识经济时代,企业该如何进行知识管理?
  18. 一文解释电路中常用电子元器件应用和选型01
  19. 从mybatis拦截器维度处理读写分离的多数据源问题
  20. java 编译器工作原理

热门文章

  1. Itext与pdfBox坐标定位问题
  2. Live800:企业必修课|新时代的全渠道营销解析(上)
  3. 全渠道客户体验是什么?如何创建全渠道营销平台?
  4. 中英文字数统计以及信息熵的计算
  5. 阿里云服务器租赁注意点
  6. 2022.11.24
  7. 游戏人工智能——聚集与避障
  8. 华三H3C交换机路由器如何配置dhcp中继
  9. 清华2021计算机学院复试,清华大学2021年硕士研究生复试名单汇总(持续更新中)...
  10. JVAV-基础②标识符与运算符