iOS QQ第三方登实现

咱们常常会见到应用登录的时候会有QQ,微信,微博等的第三方登录c++

如图:sql

下面咱们主要讲一下qq的第三方登录如何实现json

首先,到官网注册:api

http://wiki.connect.qq.com微信

一,下载SDK网络

下载SDK  地址:app

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


下载最新版本的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])

    {

        //  记录登陆用户的OpenIDToken以及过时时间

        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中就能够看到所须要的用用户信息



大体代码以下
 
   
<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  你们须要能够去下载

相关文章
相关标签/搜索