我们经常会见到应用登陆的时候会有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

九,真机测试效果

 

打开登陆界面:

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

 

登陆中

 

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

 

登录成功

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

转载 --iOS QQ第三方登实现的更多相关文章

  1. iOS QQ第三方登实现

    我们常常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdqb2syMDA3/font/5 ...

  2. 使用iwebshop開發實現QQ第三方登錄

    $appid = "101353491"; $appkey = "df4e46ba7da52f787c6e3336d30526e4"; $redirect_ur ...

  3. 實現QQ第三方登錄

    <?php // 写几个函数,分别用于获取code,token,openid,用户信息 // 跳转到QQ授权登录页面 function code(){ $response_type='code' ...

  4. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  5. QQ第三方登录

    QQ第三方登录 在Android应用程序的开发过程中,很多时候需要加入用户登录/注册模块.除了自己动手设计登录界面并实现相应功能外,现在还可以借助百度.腾讯等开发者平台提供的第三方账号登录模块.最近研 ...

  6. php 实现qq第三方登录

    学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博文分享!

  7. PHP实现QQ第三方登录

    PHP实现QQ第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博 ...

  8. 利用JS_SDK实现QQ第三方登录

    前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...

  9. [iOS]数据库第三方框架FMDB详细讲解

    [iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...

随机推荐

  1. linux之网络配置相关

    ubuntu的网络配置文件在 /etc/network/intrfaces; suse的网络配置在          /etc/sysconfig/network/下面,每个网卡一个配置文件. int ...

  2. linux的file指令

    显示文件的类型,用命令 file 可以使你知道某个文件究竟是ELF格式的可执行文件, 还是shell script文 件或是其他的什么格式 例如:#file startx 语 法:file [-beL ...

  3. 【spring boot】【mybatis】spring boot中mybatis打印sql语句

    spring boot中mybatis打印sql语句,怎么打印出来?[参考:https://www.cnblogs.com/sxdcgaq8080/p/9100178.html] 在applicati ...

  4. [置顶] kubernetes资源对象--Label

    概念 Label机制是K8S中一个重要设计,通过Label进行对象弱关联,灵活地分类和选择不同服务或业务,让用户根据自己特定的组织结构以松耦合方式进行服务部署. Label是一对KV,对用户而言非常有 ...

  5. ubuntu 安装 regex模块时 fatal error: Python.h: No such file or directory

    原因是 python-dev包没有安装 根据Py2还是py3 sudo apt-get install python-dev 或者 sudo apt-get install python3-dev 安 ...

  6. git只拉取github部分代码的方法

    需求:github某个项目所有代码太大,有600+M,甚至更大:只需要拉取部分代码,一是可以降低网络消耗,二是可以降低磁盘占用 分析了下空间占用情况:发现每个项目下的.git/objects/pack ...

  7. hibernate的 lazy 和 fetch 一般配置

    fetch 和 lazy 配置用于数据的查询 lazy 参数值常见有 false 和 true,Hibernate3 映射文件中默认lazy = true : fetch 指定了关联对象抓取的方式,参 ...

  8. x-pack破解并安装

    声明:本文仅作为学习交流,请勿用于商业用途,否则后果自负.如需使用黄金或白金版X-Pack请购买正版. 1. 安装x-pack 具体安装过程参照:http://www.cnblogs.com/shao ...

  9. Python - 连续替换(replace)的正則表達式(re)

    字符串连续替换, 能够连续使用replace, 也能够使用正則表達式. 正則表達式, 通过字典的样式, key为待替换, value为替换成, 进行一次替换就可以. 代码 # -*- coding: ...

  10. 解决dubbo问题:forbid consumer(1)

    原因: 1.dubbo服务没有起动起来 2.dubbo链接的地址出现异常 3.dubbo服务端更新了服务接口,没有发布 如果已上都没有问题,那么还有一个原因就是 “ 别人的代码有问题 阻碍了 你的程序 ...