iOS QQ第三方登錄的簡單實(shí)現(xiàn)

前言

平時我們經(jīng)常會在一些app的登錄界面中見到第三方登錄,一些應(yīng)用中一般會使用一些類似shareSDK的集成平臺,他們是將QQ、微信、微博等第三方進(jìn)行了二次封裝,靈活性不太高,其實(shí)直接集成也是比較容易的。今天就來簡單的說一下QQ的第三方登錄的集成。

注冊開發(fā)者賬號

騰訊開放平臺 http://open.qq.com/

下載所需SDK

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

下載SDK

SDK的目錄結(jié)構(gòu)

目錄結(jié)構(gòu)

sample:示例代碼
1. TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實(shí)現(xiàn)。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的資源文件。

創(chuàng)建項(xiàng)目導(dǎo)入SDK添加依賴庫

  • TencentOpenAPI.frameworkTencentOpenApi_iOS_Bundle.bundle拖入工程,注意勾選copy items if needed
添加依賴庫
  • 點(diǎn)擊Project navigator 點(diǎn)擊TARGETS ---> General ---> Linked Frameworks and Libraries
    點(diǎn)擊加號添加
添加依賴庫

添加SDK依賴的系統(tǒng)庫文件。分別是
”Security.framework”,
“l(fā)ibiconv.dylib”,
“SystemConfiguration.framework”,
“CoreGraphics.Framework”、
“l(fā)ibsqlite3.dylib”、
“CoreTelephony.framework”、
“l(fā)ibstdc++.dylib”、
“l(fā)ibz.dylib”。

修改工程配置屬性

  • 在工程配置中的Build Settings一欄中找到Linking配置區(qū),給Other Linker Flags配置項(xiàng)添加屬性值-fobjc-arc
修改工程配置

配置之后:

修改工程配置
  • 在XCode中,選擇你的工程設(shè)置項(xiàng),選中TARGETS一欄,在“info”標(biāo)簽欄的URL type添加一條新的URL scheme,新的scheme = tencent + appid(例如你的appid123456 則填入tencent123456identifier 填寫:tencentopenapi。
    注意:此處的配置是實(shí)現(xiàn)應(yīng)用間的跳轉(zhuǎn)即跳轉(zhuǎn)至QQ進(jìn)行授權(quán)以及跳轉(zhuǎn)回app進(jìn)行其他的操作。
修改工程配置

創(chuàng)建應(yīng)用

在騰訊開發(fā)者平臺中創(chuàng)建應(yīng)用,獲得appId及appKey,具體步驟詳見開發(fā)中心,這里不再贅述。

開始添加代碼

做好了之前的步驟,現(xiàn)在開始添加調(diào)用授權(quán)的代碼。
AppDelegate.m:

#import "AppDelegate.h"  
#import <TencentOpenAPI/TencentOAuth.h> //導(dǎo)入頭文件  
  
@interface AppDelegate () <TencentSessionDelegate>  
{  
    TencentOAuth *_tencentOAth;//創(chuàng)建授權(quán)對象  
}  
@end  
  
@implementation AppDelegate  
  
  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    // Override point for customization after application launch.  
      
    _tencentOAth = [[TencentOAuth alloc] initWithAppId:@"這里填寫你申請的appID" andDelegate:self];  
      
    return YES;  
}  
  
//重寫appDelegate中的回調(diào)方法  
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {  
      
    return [TencentOAuth HandleOpenURL:url];  
}  
  
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {  
      
    return [TencentOAuth HandleOpenURL:url];  
}  

你所要調(diào)用第三方登錄的controller

#import "ViewController.h"  
#import <TencentOpenAPI/TencentOAuth.h>  
  
@interface ViewController () <TencentSessionDelegate>  
{  
    TencentOAuth *_tencentOAth;  
}  
@end  
  
@implementation ViewController  
  
- (void)viewDidLoad {  
    [super viewDidLoad];  
    // Do any additional setup after loading the view, typically from a nib.  
}  
  
- (void)didReceiveMemoryWarning {  
    [super didReceiveMemoryWarning];  
    // Dispose of any resources that can be recreated.  
}  
  
- (IBAction)qqLogin:(id)sender  
{  
    _tencentOAth = [[TencentOAuth alloc] initWithAppId:@"你所申請的appID" andDelegate:self];  
      
    //設(shè)置需要獲取的權(quán)限列表,需要什么就寫什么  
    NSArray *permissions = [NSArray arrayWithObjects:@"get_user_info",@"get_simple_userinfo",@"add_t",nil];  
  
    //調(diào)用此方法開始跳轉(zhuǎn)進(jìn)行授權(quán)  
    [_tencentOAth authorize:permissions inSafari:NO];  
}  
  
#pragma mark -- TencentSessionDelegate  
  
//登陸完成調(diào)用  
  
- (void)tencentDidLogin  
  
{  
    if (_tencentOAth.accessToken &&0 != [_tencentOAth.accessToken length])  
    {  
        //這里可獲取accessToken,Access Token憑證,用于后續(xù)訪問各開放接口  
        NSLog(@"accessToken %@",_tencentOAth.accessToken);  
  
        //這里可獲取openID,openId是用戶授權(quán)登錄后對該用戶的唯一標(biāo)識  
        NSLog(@"openId %@",_tencentOAth.openId);  
          
        //獲取用戶信息  
        [_tencentOAth getUserInfo];  
    }  
    else  
    {  
        NSLog(@"登錄不成功沒有獲取accesstoken");  
    }  
      
}  
  
  
//非網(wǎng)絡(luò)錯誤導(dǎo)致登錄失敗:  
-(void)tencentDidNotLogin:(BOOL)cancelled  
  
{  
      
    NSLog(@"tencentDidNotLogin");  
      
    if (cancelled)  
    {  
        NSLog(@"用戶取消登錄");  
    }  
    else  
    {  
        NSLog(@"登錄失敗");  
    }  
      
}  
  
// 網(wǎng)絡(luò)錯誤導(dǎo)致登錄失?。? 
- (void)tencentDidNotNetWork  
  
{  
    NSLog(@"tencentDidNotNetWork");  
}  
  
- (void)getUserInfoResponse:(APIResponse *)response  
  
{  
    NSLog(@"respons:%@",response.jsonResponse);  
      
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:response.jsonResponse[@"figureurl_2"]]];  
    UIImage *image = [UIImage imageWithData:imageData scale:1];  
    self.headerImageView.image = image;  
      
    self.nameLabel.text = response.jsonResponse[@"nickname"];  
    self.sexLabel.text = response.jsonResponse[@"gender"];  
    self.provinceLabel.text = response.jsonResponse[@"province"];  
    self.cityLabel.text = response.jsonResponse[@"city"];  
}  
  
@end  

具體步驟再來敘述一下:

  • 初始化TencentOAuth 對象 appid來自應(yīng)用寶創(chuàng)建的應(yīng)用, deletegate設(shè)置為self 記得要實(shí)現(xiàn)代理方法
  • 設(shè)置需要獲取的權(quán)限列表,需要什么就寫什么
  • 調(diào)用方法開始跳轉(zhuǎn)進(jìn)行授權(quán) [_tencentOAth authorize:permissions inSafari:NO];
  • 在tencentDidLogin代理中獲取openId、acess_token
  • 調(diào)用[_tencentOAth getUserInfo] 獲取用戶的信息
  • 在 - (void)getUserInfoResponse:(APIResponse *)response 代理中獲取用戶的信息。

至此,QQ的授權(quán)登錄就算是基本的實(shí)現(xiàn)了,至于具體的其他注冊邏輯就需要自己進(jìn)行改寫了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容