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

如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdqb2syMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

以下我们主要讲一下qq的第三方登陆怎样实现

首先,到官网注冊:

http://wiki.connect.qq.com

一,下载SDK

下载SDK  地址:

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdqb2syMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

下载最新版本号的iOS_SDK_V2.9

二。SDK的文件夹结构

下载的文件结构例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdqb2syMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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,在弹出的框中选择例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdqb2syMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

五,加入依赖库

点击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”。

六, 改动必要的project配置属性

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

效果例如以下图:

2,在XCode中。选择你的project设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”加入一条新的“URL scheme”。新的scheme = tencent + appid(比如你的appid是123456 则填入tencent123456)
identifier 填写:tencentopenapi。

appid怎么来请看第七步。

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

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

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

创建应用,在应用详情中能够看到appid

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

八,開始写代码

1,打开刚才新建的project。重写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.

}

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

事实上方法非常easy我们在登陆成功的方法里面调用

[tencentOAuth
getUserInfo];

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

-(void)getUserInfoResponse:(APIResponse *)response

{

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

}


在getUserInfoResponse中就能够看到所须要的用用户信息


大致代码例如以下


<pre name="code" class="objc">#import "ViewController.h"
#import <TencentOpenAPI/TencentOAuth.h> @interface ViewController ()<TencentSessionDelegate>
{
UIButton *qqLoginBtn;
TencentOAuth *tencentOAuth;
NSArray *permissions;
UILabel *resultLable;
UILabel *tokenLable;
} @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. //1,初始化登陆按钮 加入到当前view中
qqLoginBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
qqLoginBtn.frame=CGRectMake(100, 50, 36, 36);
[qqLoginBtn setTitle:@"登陆" forState:UIControlStateNormal];
[qqLoginBtn addTarget:self action:@selector(loginAct) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:qqLoginBtn]; //2,初始 lable
resultLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 100, 200, 36)];
tokenLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 150, 200, 36)];
[self.view addSubview:resultLable];
[self.view addSubview:tokenLable]; //3,初始化TencentOAuth 对象 appid来自应用宝创建的应用。 deletegate设置为self 一定记得实现代理方法 //这里的appid填写应用宝得到的id 记得改动 “TARGETS”一栏。在“info”标签栏的“URL type”加入 的“URL scheme”。新的scheme。有问题家QQ群414319235提问
tencentOAuth=[[TencentOAuth alloc]initWithAppId:@"1104617535" andDelegate:self]; //4,设置须要的权限列表,此处尽量使用什么取什么。
permissions= [NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil]; }
#pragma mark -- login
-(void)loginAct
{
NSLog(@"loginAct");
[tencentOAuth authorize:permissions inSafari:NO];
} #pragma mark -- TencentSessionDelegate
//登陆完毕调用
- (void)tencentDidLogin
{
resultLable.text = @"登录完毕"; if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])
{
//  记录登录用户的OpenID、Token以及过期时间
tokenLable.text = tencentOAuth.accessToken;
[tencentOAuth getUserInfo];
}
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 {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} -(void)getUserInfoResponse:(APIResponse *)response
{
NSLog(@"respons:%@",response.jsonResponse);
} @end

九,真机測试效果



打开登陆界面:

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



登陆中



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



登录成功

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



演示样例代码上传到qq群 414319235  大家须要能够去下载

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

  1. 转载 --iOS QQ第三方登实现

    我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: 下面我们主要讲一下qq的第三方登陆如何实现 首先,到官网注册: http://wiki.connect.qq.com 一,下载S ...

  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. 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

    使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...

  9. 【第三方登录】之QQ第三方登录

    最近公司做了个网站,需要用到第三方登录的东西.有QQ第三方登录,微信第三方登录.先把QQ第三方登录的代码列一下吧. public partial class QQBack : System.Web.U ...

随机推荐

  1. NOIP2016 天天爱跑步(树上差分)

    题意 给定一棵树,从时刻 0 开始,有若干人从 S[i] 出发向 T[i] 移动,每单位时刻移动一条边 对于树上每个点 x,求 w[x]  时刻有多少人恰好路过 x N,M≤300000 题解 从上午 ...

  2. java源码学习

    Collection List ArrayList LinkedList Vector Stack Set HashSet TreeSet Map HashMap TreeMap LinkedHash ...

  3. 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)

    (注,本文把live2/air并成一起写的,同时本人是木耳,请轻拍) 本命年各种坏东西,很是无语,终于坏到耳塞耳机了来了,之前用的拜亚DT235无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...

  4. GenIcam标准介绍

    GenICam TM的目标是为各种相机和设备提供通用编程接口.无论他们使用什么接口技术(GigE Vision,USB3 Vision,CoaXPress,Camera Link HS,Camera ...

  5. 题解 P1179 【数字统计】

    嚯嚯嚯,这道题很显然是削弱版的51nod P1042. 那么显然我们需要使用数位DP解题. 思路大致是这样的: 对于每一个数字,考虑三种影响关系: 1. 它对低位的影响 2. 它对高位的影响 3. 高 ...

  6. 配置TL-WVR45G企业路由动态地址

    1.打开浏览器,在地址栏输入http://192.168.1.1. 2.输入默认用户名密码:admin,登录. 3.[基本设置]->[lan设置]->[lan设置]  ip地址改成:192 ...

  7. 通过C语言程序改动控制台的背景和前景颜色

    本文主要解说怎样通过C语言来改动dos背景和前景颜色.我们首先来看一下dos的背景颜色的属性. 打开開始菜单,点击执行,弹出执行对话框.输入cmd,回车. (打开dos控制台) 在命令提示符界面下,输 ...

  8. git帮助命令

    git帮助命令 零.自己实例 cd D://software/code/PHP/phpStudy/PHPTutorial/WWW/github/m_Orchestrate git checkout - ...

  9. “==”和Equals区别

    相信很多朋友在面对,对象判等时经常会犹豫是用“==”还是Equals呢?有时候发现两者得到的结果相同,但有时候有不同, 究竟在什么情况下"==" 会相等,什么情况下Equals会不 ...

  10. 963B:Destruction of a Tree

    You are given a tree (a graph with n vertices and n - 1 edges in which it's possible to reach any ve ...