QQ登录的实现方式

 

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

标签: iOS第三方登录QQ登录增量授权第三方登录QQ详解
  16989人阅读  评论(3)  收藏  举报
  分类:
 

目录(?)[+]

项目地址 :  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 为

[objc]  view plain  copy
  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 plain  copy
  1. #import <TencentOpenAPI/QQApiInterface.h>  
  2. #import <TencentOpenAPI/TencentOAuth.h>  

   2. 并遵循代理

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

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

      

[objc]  view plain  copy
  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.   
  13. /** 
  14.  处理来至QQ的请求 
  15.  */  
  16. - (void)onReq:(QQBaseReq *)req{  
  17.     NSLog(@" ----req %@",req);  
  18. }  
  19.   
  20. /** 
  21.  处理来至QQ的响应 
  22.  */  
  23. - (void)onResp:(QQBaseResp *)resp{  
  24.      NSLog(@" ----resp %@",resp);  
  25. }  
  26.   
  27. /** 
  28.  处理QQ在线状态的回调 
  29.  */  
  30. - (void)isOnlineResponse:(NSDictionary *)response{  
  31.   
  32. }  

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


授权相关的字段

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


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


[objc]  view plain  copy
  1. //  
  2. //  ViewController.m  
  3. //  QQLoginDemo  
  4. //  
  5. //  Created by 张国荣 on 16/6/17.  
  6. //  Copyright © 2016年 BateOrganization. All rights reserved.  
  7. //  
  8.   
  9. #import "ViewController.h"  
  10.   
  11. #import <TencentOpenAPI/TencentOAuth.h>  
  12. #import <TencentOpenAPI/TencentApiInterface.h>  
  13.   
  14. #define APP_ID @"你的appid"  
  15. @interface ViewController ()<TencentSessionDelegate>  
  16. {  
  17.     TencentOAuth *_tencentOAuth;  
  18.     NSMutableArray *_permissionArray;   //权限列表  
  19. }  
  20. @end  
  21.   
  22. @implementation ViewController  
  23.   
  24. - (void)viewDidLoad {  
  25.     [super viewDidLoad];  
  26.       
  27.     self.view.backgroundColor = [UIColor whiteColor];  
  28. }  
  29.   
  30.   
  31. - (IBAction)loginAction:(id)sender {  
  32.     _tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID andDelegate:self];  
  33.       
  34.     //设置权限数据 , 具体的权限名,在sdkdef.h 文件中查看。  
  35.     _permissionArray = [NSMutableArray arrayWithObjects: kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];  
  36.       
  37.     //登录操作  
  38.     [_tencentOAuth authorize:_permissionArray inSafari:NO];  
  39. }  
  40.   
  41. /** 
  42.  * 登录成功后的回调 
  43.  */  
  44. - (void)tencentDidLogin{  
  45.       
  46.     /** Access Token凭证,用于后续访问各开放接口 */  
  47.     if (_tencentOAuth.accessToken) {  
  48.           
  49.         //获取用户信息。 调用这个方法后,qq的sdk会自动调用  
  50.         //- (void)getUserInfoResponse:(APIResponse*) response  
  51.         //这个方法就是 用户信息的回调方法。  
  52.           
  53.         [_tencentOAuth getUserInfo];  
  54.     }else{  
  55.       
  56.         NSLog(@"accessToken 没有获取成功");  
  57.     }  
  58.       
  59. }  
  60.   
  61. /** 
  62.  * 登录失败后的回调 
  63.  * \param cancelled 代表用户是否主动退出登录 
  64.  */  
  65. - (void)tencentDidNotLogin:(BOOL)cancelled{  
  66.     if (cancelled) {  
  67.         NSLog(@" 用户点击取消按键,主动退出登录");  
  68.     }else{  
  69.         NSLog(@"其他原因, 导致登录失败");  
  70.     }  
  71. }  
  72.   
  73. /** 
  74.  * 登录时网络有问题的回调 
  75.  */  
  76. - (void)tencentDidNotNetWork{  
  77.     NSLog(@"没有网络了, 怎么登录成功呢");  
  78. }  
  79.   
  80.   
  81. /** 
  82.  * 因用户未授予相应权限而需要执行增量授权。在用户调用某个api接口时,如果服务器返回操作未被授权,则触发该回调协议接口,由第三方决定是否跳转到增量授权页面,让用户重新授权。 
  83.  * \param tencentOAuth 登录授权对象。 
  84.  * \param permissions 需增量授权的权限列表。 
  85.  * \return 是否仍然回调返回原始的api请求结果。 
  86.  * \note 不实现该协议接口则默认为不开启增量授权流程。若需要增量授权请调用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授权时用户可能会修改登录的帐号 
  87.  */  
  88. - (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{  
  89.       
  90.     // incrAuthWithPermissions是增量授权时需要调用的登录接口  
  91.     // permissions是需要增量授权的权限列表  
  92.     [tencentOAuth incrAuthWithPermissions:permissions];  
  93.     return NO// 返回NO表明不需要再回传未授权API接口的原始请求结果;  
  94.     // 否则可以返回YES  
  95. }  
  96.   
  97. /** 
  98.  * [该逻辑未实现]因token失效而需要执行重新登录授权。在用户调用某个api接口时,如果服务器返回token失效,则触发该回调协议接口,由第三方决定是否跳转到登录授权页面,让用户重新授权。 
  99.  * \param tencentOAuth 登录授权对象。 
  100.  * \return 是否仍然回调返回原始的api请求结果。 
  101.  * \note 不实现该协议接口则默认为不开启重新登录授权流程。若需要重新登录授权请调用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登录授权时用户可能会修改登录的帐号 
  102.  */  
  103. - (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{  
  104.     return YES;  
  105. }  
  106.   
  107. /** 
  108.  * 用户通过增量授权流程重新授权登录,token及有效期限等信息已被更新。 
  109.  * \param tencentOAuth token及有效期限等信息更新后的授权实例对象 
  110.  * \note 第三方应用需更新已保存的token及有效期限等信息。 
  111.  */  
  112. - (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth{  
  113.     NSLog(@"增量授权完成");  
  114.     if (tencentOAuth.accessToken  
  115.         && 0 != [tencentOAuth.accessToken length])  
  116.     { // 在这里第三方应用需要更新自己维护的token及有效期限等信息  
  117.         // **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息** _labelAccessToken.text = tencentOAuth.accessToken;  
  118.     }  
  119.     else  
  120.     {  
  121.         NSLog(@"增量授权不成功,没有获取accesstoken");  
  122.     }  
  123.   
  124. }  
  125.   
  126. /** 
  127.  * 用户增量授权过程中因取消或网络问题导致授权失败 
  128.  * \param reason 授权失败原因,具体失败原因参见sdkdef.h文件中\ref UpdateFailType 
  129.  */  
  130. - (void)tencentFailedUpdate:(UpdateFailType)reason{  
  131.       
  132.     switch (reason)  
  133.     {  
  134.         case kUpdateFailNetwork:  
  135.         {  
  136.             //            _labelTitle.text=@"增量授权失败,无网络连接,请设置网络";  
  137.             NSLog(@"增量授权失败,无网络连接,请设置网络");  
  138.             break;  
  139.         }  
  140.         case kUpdateFailUserCancel:  
  141.         {  
  142.             //            _labelTitle.text=@"增量授权失败,用户取消授权";  
  143.             NSLog(@"增量授权失败,用户取消授权");  
  144.             break;  
  145.         }  
  146.         case kUpdateFailUnknown:  
  147.         default:  
  148.         {  
  149.             NSLog(@"增量授权失败,未知错误");  
  150.             break;  
  151.         }  
  152.     }  
  153.   
  154.       
  155. }  
  156.   
  157. /** 
  158.  * 获取用户个人信息回调 
  159.  * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse 
  160.  * \remarks 正确返回示例: \snippet example/getUserInfoResponse.exp success 
  161.  *          错误返回示例: \snippet example/getUserInfoResponse.exp fail 
  162.  */  
  163. - (void)getUserInfoResponse:(APIResponse*) response{  
  164.     NSLog(@" response %@",response);  
  165. }  
  166.   
  167. - (void)didReceiveMemoryWarning {  
  168.     [super didReceiveMemoryWarning];  
  169.     // Dispose of any resources that can be recreated.  
  170. }  
  171.   
  172. @end  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Demo QQ邮箱登录Demo是一个用于展示在Android设备上如何实现QQ邮箱登录功能的示例程序。通过该Demo,用户可以学习到如何在自己的Android应用中集成QQ邮箱登录功能,以实现用户通过QQ邮箱账号进行登录。 该Demo主要包含以下几个关键步骤: 1. 引入依赖库:为了实现QQ邮箱登录功能,首先需要在项目的Gradle文件中引入相应的依赖库。例如,可以引入QQ的开放平台SDK和QQ登录功能相关的库。 2. 注册开放平台:在QQ开放平台上注册一个开发者账号,并创建一个应用。在创建应用时,需要提供应用的包名、签名等相关信息,以获取相应的App ID和App Key。 3. 配置AndroidManifest.xml文件:将App ID和App Key配置到项目的AndroidManifest.xml文件中,以便在应用运行时使用。 4. 编写代码:通过使用QQ相关库提供的API,编写代码实现QQ邮箱登录功能。包括创建QQ登录按钮、调用授权接口、处理回调函数等。 5. 测试运行:编写好代码后,可以将应用安装到Android设备上进行测试。用户可以点击登录按钮,弹出QQ登录窗口进行授权,并使用QQ邮箱账号完成登录流程。 通过这个Demo,用户可以了解到实际开发中所需的各种步骤和技术细节,从而可以在自己的应用中集成QQ邮箱登录功能,提供方便快捷的登录方式,提升用户体验。同时,这也是将第三方登录集成到应用中的一个示例,为用户提供了学习其他第三方登录功能的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值