一、QQ三方登錄的準備工作
1.下載最新的SDK
http://wiki.open.qq.com/wiki/mobile/SDK下載
doc: 為說明文檔阁最, 方法參數(shù)說明虑润。
sample 這個是簡單的demo
TencentOpenApi_IOS_Bundle.bundle 資源文件包
TencentOpenApi.framework 核心開發(fā)框架
騰訊開發(fā)平臺上沒有QQ三方登錄的相關(guān)文檔成玫,可以搜下QQ互聯(lián),那上面比較詳細拳喻。
2.添加依賴
最簡單的方法:在sample里哭当,打開項目,照著這個項目里的依賴抄上去冗澈。
20160617162349630.jpeg
3.在工程配置中的“Build Settings”一欄中找到“Linking”配置區(qū)钦勘,給“Other Linker Flags”配置項添加屬性值“-fobjc-arc”
20160617162625160.jpeg
4.選擇項目,targets亚亲,點擊info彻采,點開下面的URL Types,點擊加號
在URL Schemes里填寫tencent + aped腐缤。
5.在info.plist文件中加入 LSApplicationQueriesSchemes
這個也是從sample里復(fù)制粘貼的。
20160617175053663.jpeg
二肛响、QQ三方登錄在代碼中的實現(xiàn)
1.引入頭文件岭粤,并遵循代理
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
@interface AppDelegate ()<QQApiInterfaceDelegate>
@end
2.在添加跳轉(zhuǎn)的請求方法
// 從微信端打開第三方APP會調(diào)用此方法,此方法再調(diào)用代理的onResp方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
[TencentOAuth HandleOpenURL:url];
[QQApiInterface handleOpenURL:url delegate:self];
return YES;
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
[QQApiInterface handleOpenURL:url delegate:self];
[TencentOAuth HandleOpenURL:url];
return YES;
}
3.QQ登錄按鈕響應(yīng)事件對應(yīng)的控制器引入頭文件,準守協(xié)議
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterfaceObject.h>
@interface ViewController ()<TencentSessionDelegate>
{
TencentOAuth *_tencentOAuth;
NSMutableArray *_permissionArray; //權(quán)限列表
}
@end
4.點擊QQ登錄按鈕之后的代碼
- (IBAction)qqLogin:(id)sender {
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"1105593761" andDelegate:self];
_permissionArray = [NSMutableArray arrayWithObjects:
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
nil];
[_tencentOAuth authorize:_permissionArray];
}
#pragma TencentSessionDelegate
/**
* [該邏輯未實現(xiàn)]因token失效而需要執(zhí)行重新登錄授權(quán)特笋。在用戶調(diào)用某個api接口時剃浇,如果服務(wù)器返回token失效,則觸發(fā)該回調(diào)協(xié)議接口猎物,由第三方?jīng)Q定是否跳轉(zhuǎn)到登錄授權(quán)頁面偿渡,讓用戶重新授權(quán)。
* \param tencentOAuth 登錄授權(quán)對象霸奕。
* \return 是否仍然回調(diào)返回原始的api請求結(jié)果溜宽。
* \note 不實現(xiàn)該協(xié)議接口則默認為不開啟重新登錄授權(quán)流程。若需要重新登錄授權(quán)請調(diào)用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登錄授權(quán)時用戶可能會修改登錄的帳號
*/
- (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{
return YES;
}
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{
// incrAuthWithPermissions是增量授權(quán)時需要調(diào)用的登錄接口
// permissions是需要增量授權(quán)的權(quán)限列表
[tencentOAuth incrAuthWithPermissions:permissions];
return NO; // 返回NO表明不需要再回傳未授權(quán)API接口的原始請求結(jié)果质帅;
// 否則可以返回YES
}
-(void)tencentDidLogin{
NSLog(@"----ok-----");
/** Access Token憑證适揉,用于后續(xù)訪問各開放接口 */
if (_tencentOAuth.accessToken) {
//獲取用戶信息。 調(diào)用這個方法后煤惩,qq的sdk會自動調(diào)用
//- (void)getUserInfoResponse:(APIResponse*) response
//這個方法就是 用戶信息的回調(diào)方法嫉嘀。
[_tencentOAuth getUserInfo];
}else{
NSLog(@"accessToken 沒有獲取成功");
}
}
//-(NSArray *)getAuthorizedPermissions:(NSArray *)permissions withExtraParams:(NSDictionary *)extraParams{
// NSLog(@"----%@********%@-----",permissions,extraParams);
// return permissions;
//}
- (void)getUserInfoResponse:(APIResponse*) response{
NSLog(@"*********");
NSLog(@" response %@",response);
NSLog(@"*********");
}
-(void)tencentDidNotLogin:(BOOL)cancelled{
if (cancelled) {
NSLog(@" 用戶點擊取消按鍵,主動退出登錄");
}else{
NSLog(@"其他原因, 導(dǎo)致登錄失敗");
}
}
-(void)tencentDidNotNetWork{
NSLog(@"沒有網(wǎng)絡(luò)了魄揉, 怎么登錄成功呢");
}