iOS QQ授權(quán)登錄

QQ互聯(lián)開(kāi)放平臺(tái)

Demo源碼(記得給個(gè)star哦)

配置Universal Links

使用Universal Links填坑

騰訊openSDK授權(quán)登錄功能使用的是OAuth2.0協(xié)議约急,建議先仔細(xì)閱讀該協(xié)議OAuth Grant Types其中Authorization Code驗(yàn)證模式的詳細(xì)內(nèi)容俏蛮,對(duì)后續(xù)會(huì)有很大幫助娃圆。

言歸正傳椭豫,QQ授權(quán)登錄的大概流程如下:

申請(qǐng)接入QQ互聯(lián)開(kāi)放平臺(tái)荤崇,獲取APP ID和APP Key;

集成iOS Open SDK荆残,并配置工程翎承;

初始化TencentOAuth對(duì)象,配合真機(jī)聯(lián)調(diào)望薄;

拉起手機(jī)QQ應(yīng)用進(jìn)行驗(yàn)證疟游,并獲得Authorization Code;

注意:以上4個(gè)步驟由移動(dòng)前端完成痕支,下面步驟建議放在服務(wù)器后端實(shí)現(xiàn)

通過(guò)Authorization Code獲取Access Token颁虐;

通過(guò)Access Token獲取用戶的OpenId和UnionId;

通過(guò)Access Token和OpenId來(lái)獲取當(dāng)前QQ用戶信息卧须。

第一步:申請(qǐng)接入QQ互聯(lián)開(kāi)放平臺(tái)

首先確保你在QQ互聯(lián)(開(kāi)放平臺(tái))上注冊(cè)另绩、通過(guò)開(kāi)發(fā)者審核儒陨,并創(chuàng)建對(duì)應(yīng)的移動(dòng)應(yīng)用并審核通過(guò),到開(kāi)放平臺(tái)->應(yīng)用管理->移動(dòng)應(yīng)用->查看笋籽,至于如何配置就不在這里贅述了蹦漠。通過(guò)審核的應(yīng)用會(huì)提供兩個(gè)字段:APP ID、APP Key车海,記錄下來(lái)備用:

開(kāi)放平臺(tái)配置1.png

第二步:集成TencentOpenApi SDK

將從開(kāi)放平臺(tái)下載的iOS_SDK笛园,解壓縮后將TencentOpenAPI.framework文件集成到你當(dāng)前的工程中,并添加SDK依賴的系統(tǒng)庫(kù):

CoreGraphics.framework

CoreTelephony.framework

Foundation.framework

libc++.tbd

libiconv.tbd

libsqlite3.tbd

Security.framework

SystemConfiguration.framework

WebKit.framework

第三步:配置URL Scheme

當(dāng)分享結(jié)束后從QQ應(yīng)用回到原生App是通過(guò)URL Scheme跳轉(zhuǎn)的侍芝,配置方法如下:

打開(kāi)Xcode選擇project → Info → URL Types → 點(diǎn)擊”+“新增

Identifier固定填寫:tencentopenapi研铆,URL Schemes填寫tencen+APP ID(例如APP ID為101957543,則填寫:tencent101957543)

Xcode配置1.png

第四步:配置LSApplicationQueriesSchemes

找到info.plist州叠,右擊選擇open as → source code

將下面代碼添加進(jìn)去:

<key>LSApplicationQueriesSchemes</key><array><string>tim</string><string>mqq</string><string>mqqapi</string><string>mqqbrowser</string><string>mttbrowser</string><string>mqqOpensdkSSoLogin</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV4</string><string>mqzone</string><string>mqzoneopensdk</string><string>mqzoneopensdkapi</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapiV2</string><string>mqqapiwallet</string><string>mqqopensdkfriend</string><string>mqqopensdkavatar</string><string>mqqopensdkminiapp</string><string>mqqopensdkdataline</string><string>mqqgamebindinggroup</string><string>mqqopensdkgrouptribeshare</string><string>tencentapi.qq.reqContent</string><string>tencentapi.qzone.reqContent</string><string>mqqthirdappgroup</string><string>mqqopensdklaunchminiapp</string><string>mqqopensdkproxylogin</string><string>mqqopensdknopasteboard</string></array>

第五步:初始化TencentOAuth對(duì)象棵红,配合真機(jī)聯(lián)調(diào)

#defineAPP_ID? ? ? ? ? @"101234567"http://填寫開(kāi)放平臺(tái)上的APP ID#defineUNIVERSAL_LINK? @"https://help.wechat/qq_conn/101234567"http://填寫開(kāi)放平臺(tái)上的Universal LinkTencentOAuth*tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID enableUniveralLink:YES universalLink:UNIVERSAL_LINK delegate:self];if(tencentOAuth){//調(diào)試時(shí)開(kāi)啟Log,上線記得注釋該方法[QQApiInterface startLogWithBlock:^(NSString*logStr){NSLog(@"%@",logStr);}]NSLog(@"Tencent openSDK初始化成功");}

在宏定義APP_ID中填寫你在QQ開(kāi)放平臺(tái)上申請(qǐng)應(yīng)用的APP ID咧栗,注意當(dāng)前工程的Bundle ID必須與其對(duì)應(yīng)逆甜,如果你使用的SDK版本大于3.3.7,你還需要填寫對(duì)應(yīng)Universal Link

真機(jī)運(yùn)行一下致板,如果控制臺(tái)打印輸出了Tencent openSDK初始化成功繼續(xù)下一步交煞;

否則請(qǐng)檢查手機(jī)是否已安裝QQ應(yīng)用,并且更新到最新版本可岂。

第六步:拉起手機(jī)QQ應(yīng)用進(jìn)行驗(yàn)證错敢,并獲得Authorization Code

//發(fā)起授權(quán)登錄請(qǐng)求if([QQApiInterface isQQInstalled]&&[QQApiInterface isQQSupportApi]){if([QQApiInterface isQQInstalled]&&[QQApiInterface isQQSupportApi]){NSArray*permissions=@[kOPEN_PERMISSION_GET_USER_INFO,kOPEN_PERMISSION_GET_SIMPLE_USER_INFO];_tencentOAuth.authShareType=AuthShareType_QQ;//使用QQ應(yīng)用(若要選擇TIM,替換為:AuthShareType_TIM)_tencentOAuth.authMode=kAuthModeServerSideCode;//授權(quán)方式使用Server Side Code[_tencentOAuth authorize:permissions];}else{NSLog(@"當(dāng)前設(shè)備未安裝QQ應(yīng)用或版本過(guò)低");}

在獲取用戶授權(quán)之前缕粹,首先必須清楚自己需要用戶的哪些信息,SDK提供多種選擇可以根據(jù)自己的需要請(qǐng)求用戶不同信息的授權(quán)纸淮,盡量不要取太多避免被用戶拒絕平斩。

下面實(shí)現(xiàn)回調(diào):

#pragmamark - TencentLoginDelegate// 成功后的回調(diào)-(void)tencentDidLogin{NSLog(@"授權(quán)登錄成功");//注意,區(qū)分兩種授權(quán)模式://1.Server Side Code Mode:NSString*code=[_tencentOAuth getServerSideCode];NSLog(@"Authorization Code:%@",code);//2.Client Side Token Mode:NSString*token=[_tencentOAuth accessToken];NSLog(@"Access Token:%@",token);}// 失敗后的回調(diào)-(void)tencentDidNotLogin:(BOOL)cancelled{NSLog(@"QQ登錄失敗");}// 網(wǎng)絡(luò)有問(wèn)題的回調(diào)-(void)tencentDidNotNetWork{NSLog(@"QQ登錄時(shí)網(wǎng)絡(luò)有問(wèn)題");}

在這里要注意以下幾點(diǎn):

不要弄混淆授權(quán)登錄的回調(diào)(TencentLoginDelegate)和分享的回調(diào)(QQApiInterfaceDelegate)咽块;

SDK提供了兩種授權(quán)方式:Server Side Code 和 Client Side Token

2.1Server Side Code:使用的是OAuth 2.0協(xié)議內(nèi)的Authorization Code登錄模式(和微信登錄一樣)绘面,因此作為移動(dòng)前端到成功獲取code為止,因?yàn)楹竺鎯?nèi)容涉及到Access Token侈沪、Refresh Token揭璃、Secret密鑰等較為私密的信息,為了避免用戶數(shù)據(jù)泄漏的風(fēng)險(xiǎn)亭罪,接將下來(lái)的工作建議交由后端來(lái)完成瘦馍;

2.2Client Side Token:可以由前端直接獲取Access Token、OpenID应役、UnionID情组,但要注意Token的有效期燥筷、緩存、刷新等需要由前端自行判斷并完成院崇。

本人更為推薦使用Server Side Code授權(quán)方式肆氓,移動(dòng)前端只保留APP ID,不直接接觸Token和UnionID相關(guān)信息底瓣,且不存儲(chǔ)APP KEY谢揪,即使有人截獲Authorization Code也無(wú)法正常使用

第七步:由Authorization Code獲取Access Token(后端實(shí)現(xiàn))

注意:這里的Authorization Code 是 Server Side Code

準(zhǔn)備三樣?xùn)|西:

APP ID(見(jiàn)第一步,應(yīng)用接入QQ互聯(lián)開(kāi)放平臺(tái)后獲得)

APP KEY(見(jiàn)第一步捐凭,應(yīng)用接入QQ互聯(lián)開(kāi)放平臺(tái)后獲得)

Authorization Code(見(jiàn)第六步键耕,由移動(dòng)前端獲得)

將上面三個(gè)字段分別填入如下地址,發(fā)送請(qǐng)求:

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=[APP_ID]&client_secret=[APP_SECRET]&code=[AUTHORIZATION_CODE]&fmt=json

返回結(jié)果示例:

{"access_token":"3A567BE8C98EF0D71B95CA11ADACC2B3","expires_in":"7776000","refresh_token":"E6D5497F1CDAE8D528CFEC988EA973B6"}

第八步:由Access Token獲取OpenID和UnionID(后端實(shí)現(xiàn))

使用上一步獲得的access_token作為入?yún)⒏逃l(fā)送請(qǐng)求:

https://graph.qq.com/oauth2.0/me?access_token=[Access_Token]&unionid=1&fmt=json

返回結(jié)果示例:

{"client_id":"101923149","openid":"6B50CBEB0C52B64A468C320CAAF647F9","unionid":"UID_E3E32E487F4792895756E050BC2521D8"}

注意:

unionid主要用來(lái)獲取用戶的基本信息屈雄,如果需要進(jìn)行賬號(hào)綁定請(qǐng)使用unionid;

獲取unionid來(lái)區(qū)分用戶的唯一性(只要在相同QQ互聯(lián)平臺(tái)賬號(hào)下官套,同一個(gè)QQ號(hào)即使不同在應(yīng)用上獲取到的UnionID是相同的)酒奶;

獲取unionid需要到QQ互聯(lián)開(kāi)放平臺(tái)進(jìn)行開(kāi)通,到開(kāi)放平臺(tái)→ 應(yīng)用管理 → 移動(dòng)應(yīng)用 → 查看 → 應(yīng)用接口奶赔,查看unionid接口狀態(tài)是否為”已獲取“惋嚎。

QQ開(kāi)放平臺(tái)獲取unionid.png

第九步:由OpenID獲取和用戶信息

使用上一步得到的OpenID作為入?yún)ⅲl(fā)送請(qǐng)求:

https://graph.qq.com/user/get_user_info?access_token=[ACCESS_TOKEN]&oauth_consumer_key=[APP_ID]&openid=[OPEN_ID]

返回結(jié)果示例:

{"ret":0,"msg":"","is_lost":0,"nickname":"王海洋","gender":"男","gender_type":1,"province":"江蘇","city":"蘇州","year":"1981","constellation":"","figureurl":"http://qzapp.qlogo.cn/qzapp/101923149/6B50CBEB0C52B64A468C320CAAF647F9/30","figureurl_1":"http://qzapp.qlogo.cn/qzapp/101923149/6B50CBEB0C52B64A468C320CAAF647F9/50","figureurl_2":"http://qzapp.qlogo.cn/qzapp/101923149/6B50CBEB0C52B64A468C320CAAF647F9/100","figureurl_qq_1":"http://thirdqq.qlogo.cn/g?b=oidb&k=lXE9UzSHuU469ftuzpZicIw&s=40&t=1488770244","figureurl_qq_2":"http://thirdqq.qlogo.cn/g?b=oidb&k=lXE9UzSHuU469ftuzpZicIw&s=100&t=1488770244","figureurl_qq":"http://thirdqq.qlogo.cn/g?b=oidb&k=lXE9UzSHuU469ftuzpZicIw&s=100&t=1488770244","figureurl_type":"0","is_yellow_vip":"0","vip":"0","yellow_vip_level":"0","level":"0","is_yellow_year_vip":"0"}

如果本文對(duì)你有所幫助記得點(diǎn)個(gè)贊哈

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末站刑,一起剝皮案震驚了整個(gè)濱河市另伍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绞旅,老刑警劉巖摆尝,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異因悲,居然都是意外死亡堕汞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門晃琳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讯检,“玉大人,你說(shuō)我怎么就攤上這事卫旱∪俗疲” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵顾翼,是天一觀的道長(zhǎng)投放。 經(jīng)常有香客問(wèn)我,道長(zhǎng)暴构,這世上最難降的妖魔是什么跪呈? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任段磨,我火速辦了婚禮,結(jié)果婚禮上耗绿,老公的妹妹穿的比我還像新娘苹支。我一直安慰自己,他們只是感情好误阻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布债蜜。 她就那樣靜靜地躺著,像睡著了一般究反。 火紅的嫁衣襯著肌膚如雪寻定。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天精耐,我揣著相機(jī)與錄音狼速,去河邊找鬼。 笑死卦停,一個(gè)胖子當(dāng)著我的面吹牛向胡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惊完,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼僵芹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了小槐?” 一聲冷哼從身側(cè)響起拇派,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凿跳,沒(méi)想到半個(gè)月后件豌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拄显,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年苟径,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬审。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蟆盐,靈堂內(nèi)的尸體忽然破棺而出承边,到底是詐尸還是另有隱情,我是刑警寧澤石挂,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布博助,位于F島的核電站,受9級(jí)特大地震影響痹愚,放射性物質(zhì)發(fā)生泄漏富岳。R本人自食惡果不足惜蛔糯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窖式。 院中可真熱鬧蚁飒,春花似錦、人聲如沸萝喘。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阁簸。三九已至爬早,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間启妹,已是汗流浹背筛严。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饶米,地道東北人桨啃。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像咙崎,于是被迫代替她去往敵國(guó)和親优幸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • QQ互聯(lián)開(kāi)放平臺(tái)[https://connect.qq.com/]Demo源碼[https://github.co...
    Geniune閱讀 3,478評(píng)論 0 4
  • 微信第三方登錄 一褪猛、注冊(cè)微信開(kāi)放平臺(tái)開(kāi)發(fā)賬號(hào) 1. 微信開(kāi)放平臺(tái)網(wǎng)站:微信開(kāi)放平臺(tái) 2. 注冊(cè)開(kāi)發(fā)者賬號(hào)网杆,按步驟填...
    VENTI閱讀 9,428評(píng)論 6 8
  • 原文網(wǎng)址:http://www.reibang.com/p/7e3c5fc31708 0.demo說(shuō)明別的先不說(shuō)d...
    楓之葉_小乙哥閱讀 2,820評(píng)論 1 5
  • 安裝包 接上文GitHub第三方授權(quán)登錄 申請(qǐng)過(guò)程不介紹了,申請(qǐng)者資料,個(gè)人也是可以申請(qǐng)成功的伊滋。 這時(shí)候有二個(gè)參數(shù)...
    天上有木月0閱讀 678評(píng)論 0 2
  • 準(zhǔn)備工作 在微信開(kāi)放平臺(tái)注冊(cè)開(kāi)發(fā)者帳號(hào)碳却,并擁有一個(gè)已審核通過(guò)的網(wǎng)站應(yīng)用,并獲得相應(yīng)的AppID和AppSecret...
    fadeqi閱讀 3,725評(píng)論 0 3