一步一步实现iOS QQ第三方登录
前言
最近在公司應(yīng)用中集成QQ登錄的時候遇到一些波折(坑點),覺得還是有必要記錄一下.
一.集成SDK
1.集成官方Framework
首先下載官網(wǎng)SDK iOS_SDK下載,目前來說最新的包是V3.1.0,下載完解壓后你會看到
- TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實現(xiàn)
- TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的資源文件 然后將這兩個文件拖入到工程中.
2.Cocoapods集成方式
除了導(dǎo)入官方Framework的方式,還有一種方式是集成Pods方式:TencentOpenApiSDK 目前我用的版本是2.9.5. 我用的方式是Cocoapods集成的方式.如何選擇請根據(jù)自身情況做出決定.
二.配置工程
1.添加SDK依賴的系統(tǒng)庫文件
此外還需要導(dǎo)入一些庫分別是: "SystemConfiguration.framework" "Security.framework" "CoreTelephony.framework" "CoreGraphics.Framework" "libiconv.tbd" "libsqlite3.tbd" "libstdc++.tbd" "libz.tbd"
TIPS: .dylib在XCode7以后變成.tbd了,如果你是Xcode7以下的版本,就是.dylib,不過庫的名字一樣
在Xcode中打開工程配置文件,選擇“general”一欄,在最下面找到"Linked Framewords and Libraries"選項點擊下面添加按鈕添加上面的庫即可.
2. 修改必要的工程配置屬性。
在工程配置中的“Build Settings”一欄中找到“Linking”配置區(qū),給“Other Linker Flags”配置項添加屬性值“-fobjc-arc”
3.Info.Plist設(shè)置
在工程配置中的"Info"中找到"URL Types",添加一條新的“URL scheme”. 注意:
Identifier: tencentopenapi URL Schemes: tencent + appid 復(fù)制代碼其中Identifier 和URL Schemes是必填項,Identifier是tencentopenapi,URL Schemes是tencent加上你在官網(wǎng)申請的appid. 申請APPID
你以為到了這步就完了嗎,NO NO NO 要想實現(xiàn)點擊之后跳轉(zhuǎn)到QQ是應(yīng)用間跳轉(zhuǎn)的效果而不是打開一個登錄網(wǎng)頁的話我們還得再Info.plist表中添加一下鏈接. 找到工程的Info.plist,然后添加"LSApplicationQueriesSchemes"
<key>LSApplicationQueriesSchemes</key><array><string>mqqapi</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqconnect</string><string>mqqopensdkdataline</string><string>mqqopensdkgrouptribeshare</string><string>mqqopensdkfriend</string><string>mqqopensdkapi</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqzoneopensdk</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV3</string><string>mqzone</string><string>mqzonev2</string><string>mqzoneshare</string><string>wtloginqzone</string><string>mqzonewx</string><string>mqzoneopensdkapiV2</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqzoneopensdk</string></array> 復(fù)制代碼三.業(yè)務(wù)集成
1. AppDelegate
到了這里,我們的工程配置算是完成了.接下來在AppDelegate中 #import <TencentOpenAPI/TencentOAuth.h> 并且重寫AppDelegate 的handleOpenURL和openURL方法
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]; } 復(fù)制代碼2.初始化iOS SDK API數(shù)據(jù)對象TencentOAuth
(1) 創(chuàng)建TencentOAuth并初始化其appid,demo為123456789。delegate為實現(xiàn)TencentSessionDelegate的對象:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"123456789", andDelegate:self]; 復(fù)制代碼這里delegate不能為空
(2)設(shè)置應(yīng)用需要用戶授權(quán)的API列表。 (建議如果授權(quán)過多的話,可能會造成用戶不愿意授權(quán)。這里最好只授權(quán)應(yīng)用需要用戶賦予的授權(quán)。):
NSArray *permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_INFO, kOPEN_PERMISSION_GET_USER_INFO, kOPEN_PERMISSION_GET_SIMPLE_USER_INFO, nil]; // 這里調(diào)起登錄[_tencentOAuth authorize:permissions]; 復(fù)制代碼注意: 這個地方官網(wǎng)是下面的寫法
_permissions?=?[[NSArray?arrayWithObjects:@"get_user_info",@"get_simple_userinfo",?@"add_t",?nil]?retain]; 復(fù)制代碼但是本人試驗了一下之后會報"msg = "this api without user authorization";ret=100030"
遵守代理
需要遵守TencentSessionDelegate協(xié)議,并在代碼中實現(xiàn)協(xié)議中的方法,具體方法很多,這里就不一一列舉了,具體協(xié)議可以參照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件
調(diào)用SDK登錄
1.調(diào)用登錄的方法很簡單
[_tencentOAuth authorize:permissions]; 復(fù)制代碼2.登錄完成之后,會調(diào)用TencentSessionDelegate中關(guān)于登錄的協(xié)議方法
//登錄成功: - (void)tencentDidLogin {if (_tencentOAuth.accessToken.length > 0) {// 獲取用戶信息[_tencentOAuth getUserInfo];} else {NSLog(@"登錄不成功 沒有獲取accesstoken");} }//非網(wǎng)絡(luò)錯誤導(dǎo)致登錄失敗: - (void)tencentDidNotLogin:(BOOL)cancelled {if (cancelled) {NSLog(@"用戶取消登錄");} else {NSLog(@"登錄失敗");} } 復(fù)制代碼3.獲取用戶信息 實現(xiàn)- (void)getUserInfoResponse:(APIResponse*) response;方法,從response獲取用戶的個人信息
// 獲取用戶信息 - (void)getUserInfoResponse:(APIResponse *)response {if (response && response.retCode == URLREQUEST_SUCCEED) {NSDictionary *userInfo = [response jsonResponse];NSString *nickName = userInfo[@"nickname"];// 后續(xù)操作...} else {NSLog(@"QQ auth fail ,getUserInfoResponse:%d", response.detailRetCode);} } 復(fù)制代碼4.增量授權(quán) 當?shù)谌綉?yīng)用調(diào)用某個API接口時,如果服務(wù)器返回操作未被授權(quán),則會觸發(fā)增量授權(quán)邏輯。第三方應(yīng)用需自行實現(xiàn)tencentNeedPerformIncrAuth:withPermissions:協(xié)議接口才能夠進入增量授權(quán)邏輯,否則默認第三方應(yīng)用放棄增量授權(quán)。示例如下:
- (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 } 復(fù)制代碼結(jié)束語
至此如何集成QQ第三方登錄就介紹完畢,本人集成的時候也是跳了幾個坑,慢慢來總會弄好的.如果大家有啥問題可以issue我.
轉(zhuǎn)載于:https://juejin.im/post/5aa53fb55188255581549a0c
總結(jié)
以上是生活随笔為你收集整理的一步一步实现iOS QQ第三方登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker端口映射错误的解决方法
- 下一篇: 王爽 汇编 实验10