iOS中如何实现QQ的第三方登陆

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

本文转自 http://blog.csdn.net/lwjok2007 仅供学习

首先,到官网注册:

一,下载SDK

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

iOS中如何实现QQ的第三方登陆_第1张图片

一定要下载最新版本的iOS_SDK

二,SDK的目录结构

sample:示例代码

TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。
TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。

三,在Xcode中创建项目

新建空白项目,起名TestQQLogin

iOS中如何实现QQ的第三方登陆_第2张图片

四,将iOS SDK添加到项目中

  1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拖放到应用开发的目录下。
  2. 在弹出的框中选择如下


    iOS中如何实现QQ的第三方登陆_第3张图片

五,添加依赖库

点击Project navigator 点击TARGETS —> General —> Linked Frameworks and Libraries
点击加号添加

iOS中如何实现QQ的第三方登陆_第4张图片

添加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”

iOS中如何实现QQ的第三方登陆_第5张图片

效果如下图:

iOS中如何实现QQ的第三方登陆_第6张图片

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

iOS中如何实现QQ的第三方登陆_第7张图片

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

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

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

创建应用,在应用详情中可以看到appid
iOS中如何实现QQ的第三方登陆_第8张图片

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

iOS中如何实现QQ的第三方登陆_第9张图片

八,开始写代码

1,打开刚才新建的工程,重写appdelegate的两个方法
重写之前导入头文件

 #import 

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中就可以看到所需要的用用户信息

大致代码如下

#import 

@interface ViewController ()
{
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

九,真机测试效果

打开登陆界面:

iOS中如何实现QQ的第三方登陆_第10张图片
iOS中如何实现QQ的第三方登陆_第11张图片
iOS中如何实现QQ的第三方登陆_第12张图片

具体方法已经写全了,大家可以相互交流学习

你可能感兴趣的:(iOS中如何实现QQ的第三方登陆)