我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆

如图:

下面我们主要讲一下qq的第三方登陆如何实现

首先,到官网注册:

http://wiki.connect.qq.com

一,下载SDK

下载SDK  地址:

http://wiki.open.qq.com/wiki/mobile/SDK下载

下载最新版本的iOS_SDK_V2.9

二,SDK的目录结构

下载的文件结构如下

---------------------------------------------------------------------------------------------------------------------

sample:示例代码

1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。

2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。

三,在Xcode中创建项目

新建空白项目,起名TestQQLogin

四,将iOS SDK添加到项目中

1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拖放到应用开发的目录下。

2,在弹出的框中选择如下

五,添加依赖库

点击Project navigator 点击TARGETS --->  General  ---> Linked Frameworks and Libraries

点击加号添加

添加SDK依赖的系统库文件。分别是

”Security.framework”,

“libiconv.dylib”,

“SystemConfiguration.framework”,

“CoreGraphics.Framework”、

“libsqlite3.dylib”、

“CoreTelephony.framework”、

“libstdc++.dylib”、

“libz.dylib”。

六, 修改必要的工程配置属性

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

效果如下图:

2,在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid(例如你的appid是123456 则填入tencent123456) identifier 填写:tencentopenapi。appid怎么来请看第七步。

七,在腾讯应用宝创建应用

第六步配置中需要的appid等信息 需要首先在应用宝中创建应用才能得到。

首先登陆网站:http://open.qq.com

创建应用,在应用详情中可以看到appid

申请完成后一定记得添加测试qq,否则没有审核通过的应用是无法直接登陆的

八,开始写代码

1,打开刚才新建的工程,重写appdelegate的两个方法

重写之前导入头文件

#import <TencentOpenAPI/TencentOAuth.h>

openURL:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

return [TencentOAuth HandleOpenURL:url];

}

handleOpenURL:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

return [TencentOAuth HandleOpenURL:url];

}

 
 
 
2 , 在需要使用的 viewController中 初始化
 

tencentOAuth=[[TencentOAuthalloc]initWithAppId:@"你的appid"andDelegate:self];

3,设置权限列表

//4,设置需要的权限列表,此处尽量使用什么取什么。

permissions= [NSArrayarrayWithObjects:@"get_user_info",@"get_simple_userinfo",@"add_t",nil];

4,登陆

[tencentOAuth authorize:permissionsinSafari:NO];

5,在代码中实现 TencentSessionDelegate 方法

#pragma mark -- TencentSessionDelegate

//登陆完成调用

- (void)tencentDidLogin

{

resultLable.text =@"登录完成";

if (tencentOAuth.accessToken &&0 != [tencentOAuth.accessTokenlength])

{

//  记录登录用户的OpenID、Token以及过期时间

tokenLable.text =tencentOAuth.accessToken;

}

else

{

tokenLable.text =@"登录不成功没有获取accesstoken";

}

}

//非网络错误导致登录失败:

-(void)tencentDidNotLogin:(BOOL)cancelled

{

NSLog(@"tencentDidNotLogin");

if (cancelled)

{

resultLable.text =@"用户取消登录";

}else{

resultLable.text =@"登录失败";

}

}
// 网络错误导致登录失败:

-(void)tencentDidNotNetWork

{

NSLog(@"tencentDidNotNetWork");

resultLable.text =@"无网络连接,请设置网络";

}

- (void)didReceiveMemoryWarning {

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

以上方法基本上就实现了登陆,下来我们得考虑登陆成功之后如何获取用户信息

其实方法很简单我们在登陆成功的方法里面调用

[tencentOAuth getUserInfo];

然后系统会调用一个方法(我们需要提前实现)

-(void)getUserInfoResponse:(APIResponse *)response

{

NSLog(@"respons:%@",response.jsonResponse);

}

 

在getUserInfoResponse中就可以看到所需要的用用户信息

 

大致代码如下

  1. <pre name="code" class="objc">#import "ViewController.h"
  2. #import <TencentOpenAPI/TencentOAuth.h>
  3. @interface ViewController ()<TencentSessionDelegate>
  4. {
  5. UIButton *qqLoginBtn;
  6. TencentOAuth *tencentOAuth;
  7. NSArray *permissions;
  8. UILabel *resultLable;
  9. UILabel *tokenLable;
  10. }
  11. @end
  12. @implementation ViewController
  13. - (void)viewDidLoad {
  14. [super viewDidLoad];
  15. // Do any additional setup after loading the view, typically from a nib.
  16. //1,初始化登陆按钮 添加到当前view中
  17. qqLoginBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  18. qqLoginBtn.frame=CGRectMake(100, 50, 36, 36);
  19. [qqLoginBtn setTitle:@"登陆" forState:UIControlStateNormal];
  20. [qqLoginBtn addTarget:self action:@selector(loginAct) forControlEvents:UIControlEventTouchDown];
  21. [self.view addSubview:qqLoginBtn];
  22. //2,初始 lable
  23. resultLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 100, 200, 36)];
  24. tokenLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 150, 200, 36)];
  25. [self.view addSubview:resultLable];
  26. [self.view addSubview:tokenLable];
  27. //3,初始化TencentOAuth 对象 appid来自应用宝创建的应用, deletegate设置为self  一定记得实现代理方法
  28. //这里的appid填写应用宝得到的id  记得修改 “TARGETS”一栏,在“info”标签栏的“URL type”添加 的“URL scheme”,新的scheme。有问题家QQ群414319235提问
  29. tencentOAuth=[[TencentOAuth alloc]initWithAppId:@"1104617535" andDelegate:self];
  30. //4,设置需要的权限列表,此处尽量使用什么取什么。
  31. permissions= [NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil nil];
  32. }
  33. #pragma mark -- login
  34. -(void)loginAct
  35. {
  36. NSLog(@"loginAct");
  37. [tencentOAuth authorize:permissions inSafari:NO];
  38. }
  39. #pragma mark -- TencentSessionDelegate
  40. //登陆完成调用
  41. - (void)tencentDidLogin
  42. {
  43. resultLable.text = @"登录完成";
  44. if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])
  45. {
  46. //  记录登录用户的OpenID、Token以及过期时间
  47. tokenLable.text = tencentOAuth.accessToken;
  48. [tencentOAuth getUserInfo];
  49. }
  50. else
  51. {
  52. tokenLable.text = @"登录不成功 没有获取accesstoken";
  53. }
  54. }
  55. //非网络错误导致登录失败:
  56. -(void)tencentDidNotLogin:(BOOL)cancelled
  57. {
  58. NSLog(@"tencentDidNotLogin");
  59. if (cancelled)
  60. {
  61. resultLable.text = @"用户取消登录";
  62. }else{
  63. resultLable.text = @"登录失败";
  64. }
  65. }
  66. // 网络错误导致登录失败:
  67. -(void)tencentDidNotNetWork
  68. {
  69. NSLog(@"tencentDidNotNetWork");
  70. resultLable.text = @"无网络连接,请设置网络";
  71. }
  72. - (void)didReceiveMemoryWarning {
  73. [super didReceiveMemoryWarning];
  74. // Dispose of any resources that can be recreated.
  75. }
  76. -(void)getUserInfoResponse:(APIResponse *)response
  77. {
  78. NSLog(@"respons:%@",response.jsonResponse);
  79. }
  80. @end

九,真机测试效果

 

打开登陆界面:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

登陆中

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

登录成功

第三方登录之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. 第三方登录:QQ登录实现(OAuth2.0)

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

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

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

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

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

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

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

  10. Spring Security构建Rest服务-0102-Spring Social开发第三方登录之qq登录

    图一 基于SpringSocial实现qq登录,要走一个OAuth流程,拿到服务提供商qq返回的用户信息. 由上篇介绍的可知,用户信息被封装在了Connection里,所以最终要拿到Connectio ...

随机推荐

  1. jquery只能输入数字方法

    本方法为验证文本框的输入内容,如果输入的是数字,则提示"√".否则提示“必填,且只能输入数字字符”.在线体验效果:http://keleyi.com/keleyi/phtml/zz ...

  2. 详解JavaScript函数模式

    JavaScript设计模式的作用是提高代码的重用性,可读性,使代码更容易的维护和扩展.在javascript中,函数是一类对象,这表示他可以作为参数传递给其他函数:此外,函数还可以提供作用域. 创建 ...

  3. idoc 和 bapi 和 rfc 之间的区别

        se37 写出来的叫function,其中可以远程调用的叫rfc,remote-enabled function,abap语法和输入输出参数就会有一些限制.bapi是sap做好的实现特定业务操 ...

  4. JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法

    今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...

  5. SHAREPOINT 工作流审批权限问题

    继续我们上次的工作流,我们发现所有人都有审批权限,这和我们正常的逻辑相反,正常应该是只有审批人才有权限,其它人只能查看,如下 这样解决,同样为SpecialPermissions 绑定到新成员 > ...

  6. Mybatis学习记录(八)----Mybatis整合Spring

    1.整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(sp ...

  7. SAP ST05数据跟踪使用

    有时我们想知道SAP操作,对数据库中的那些表进行的增删查改. 可以使用ST05跟踪SQL语句. ST05功能界面如下: 1---激活跟踪 2---结束跟踪 3---显示跟踪结果. 如果想跟踪SQL语句 ...

  8. Apache Shiro 简介

    使用 Apache Shiro 为 web 应用程序进行用户身份验证 Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权.在本文中,了解 Apache Shiro 并通 ...

  9. Erlang 进程被抢占的条件——一个进程长时霸占调度器的极端示例

    最近研究 binary 的实现和各种操作对应的 beam 虚拟机汇编指令,发现有一些指令序列是不可重入的,比如说有的指令构造一个上下文(也就是某种全局状态),然后下一条指令会对这个上下文做操作(具体的 ...

  10. Eclipse EE 发布项目导致 Tomcate 的配置文件 server.xml 还原

    在server.xml中配置SSL时,发现了每次发布项目都导致server.xml被还原了: <Connector port="8443" protocol="or ...