前言
平時我們經(jīng)常會在一些app的登錄界面中見到第三方登錄秀仲,一些應(yīng)用中一般會使用一些類似shareSDK的集成平臺,他們是將QQ朝聋、微信来颤、微博等第三方進行了二次封裝汰扭,靈活性不太高,其實直接集成也是比較容易的脚曾。今天就來簡單的說一下QQ的第三方登錄的集成东且。
注冊開發(fā)者賬號
騰訊開放平臺 http://open.qq.com/
下載所需SDK
SDK下載地址:http://wiki.open.qq.com/wiki/mobile/SDK下載
SDK的目錄結(jié)構(gòu)
sample:示例代碼
1. TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實現(xiàn)启具。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的資源文件本讥。
創(chuàng)建項目導(dǎo)入SDK添加依賴庫
- 將
TencentOpenAPI.framework
和TencentOpenApi_iOS_Bundle.bundle
拖入工程,注意勾選copy items if needed
- 點擊Project navigator 點擊TARGETS ---> General ---> Linked Frameworks and Libraries
點擊加號添加
添加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
配置項添加屬性值-fobjc-arc
配置之后:
- 在XCode中,選擇你的工程設(shè)置項帝嗡,選中
TARGETS
一欄晶通,在“info”標(biāo)簽欄的URL type
添加一條新的URL scheme
,新的scheme = tencent + appid
(例如你的appid
是123456
則填入tencent123456
)identifier
填寫:tencentopenapi
哟玷。
注意:
此處的配置是實現(xiàn)應(yīng)用間的跳轉(zhuǎn)即跳轉(zhuǎn)至QQ進行授權(quán)以及跳轉(zhuǎn)回app進行其他的操作狮辽。
創(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)進行授權(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 記得要實現(xiàn)代理方法
- 設(shè)置需要獲取的權(quán)限列表仇轻,需要什么就寫什么
- 調(diào)用方法開始跳轉(zhuǎn)進行授權(quán) [_tencentOAth authorize:permissions inSafari:NO];
- 在tencentDidLogin代理中獲取openId、acess_token
- 調(diào)用[_tencentOAth getUserInfo] 獲取用戶的信息
- 在 - (void)getUserInfoResponse:(APIResponse *)response 代理中獲取用戶的信息奶甘。
至此篷店,QQ的授權(quán)登錄就算是基本的實現(xiàn)了,至于具體的其他注冊邏輯就需要自己進行改寫了臭家。