iOS客戶端三方登錄的封裝

如今的應(yīng)用的開始偏向社交化發(fā)展了搬设,以產(chǎn)生粘性竭沫,也可以讓用戶登錄進(jìn)App體驗(yàn)更多的功能,而傳統(tǒng)的注冊登錄的流程就稍顯冗余关噪,集成三方登錄似乎勢在必行鸟蟹。僅僅調(diào)用下客戶端就完成注冊登錄,用戶體驗(yàn)會有極大提升使兔。常見的三方登錄大致有微博建钥、微信、QQ火诸、豆瓣锦针、人人。在開發(fā)蜜Live時(shí)置蜀,考慮我們的大部分用戶是海外用戶奈搜,特意集成了Facebook和Twitter登錄。這里就主要講述對微博盯荤、微信和QQ的登錄封裝馋吗。主要目的是拿到三方賬戶的信息,如ID秋秤、頭像宏粤、昵稱脚翘、性別和簽名等信息,獲得這些信息后,至于是在自己服務(wù)器再次注冊并登錄绍哎,還是直接登錄来农。視需求而定。

1.前期準(zhǔn)備工作

主要是在各大開放平臺注冊移動應(yīng)用崇堰,填寫應(yīng)用信息并提交審核沃于。我們最好先在itunesconnect里面新建應(yīng)用,獲得AppID海诲。在平臺進(jìn)行申請時(shí)繁莹,bundleID都要填寫,QQ和微博需要填寫AppID特幔。
微博開放平臺
微信開放平臺
QQ開放平臺
微博和QQ一個(gè)移動應(yīng)用對應(yīng)iOS和Android咨演,微信一個(gè)應(yīng)用對應(yīng)一個(gè)移動端或者兩個(gè)移動端。其中比較麻煩的是微信平臺和QQ平臺蚯斯,微信新建的應(yīng)用必須上傳應(yīng)用Logo薄风,并填寫B(tài)undle ID,而且默認(rèn)的權(quán)限是分享,待審核通過后再申請開通"微信登錄"功能溉跃,申請結(jié)果是AppID和AppSecret,在管理中心->移動應(yīng)用->應(yīng)用詳情顯示村刨。
微博平臺的結(jié)果是App Key和App Secret,在我的應(yīng)用->應(yīng)用信息下可以看到撰茎。

2.環(huán)境配置

需要將各大平臺的SDK(.a文件)下載下來嵌牺,并導(dǎo)入工程里。這里主要簡述URL type的配置龄糊。因?yàn)槿降卿浭钦{(diào)用客戶端(微博逆粹,微信,QQ)炫惩,由客戶端處理完成后再返回我們的App僻弹,所以必須配置URL type,否則無法返回我們的App他嚷。在plist文件中新增屬性URL types蹋绽,其類型為數(shù)組。我們這里以微博為例子筋蓖,在里面新建一項(xiàng)卸耘,第一個(gè)會自動被命名Item 0,是字典熟悉粘咖,并已經(jīng)包含了一個(gè)URL identifier的Key蚣抗,在字典下面增加熟悉,Key選擇URL Schemes瓮下,將值改為wb***翰铡,其中省略號為申請的移動應(yīng)用的App Key钝域。這樣從微博客戶端就能夠返回我們的App了。同理將微信和QQ添加上去锭魔。這里要注意:1.微信不用像微博那些加前綴例证,可以直接用AppID。2.QQ需要添加兩個(gè)赂毯,一個(gè)值是AppID加前綴tencent战虏,另一個(gè)值是將AppID轉(zhuǎn)化為16進(jìn)制后加上前綴QQ。下圖是配置完成后的党涕,為了方便起見,在每個(gè)Item中使用了Document Role巡社,而不是URL identifier膛堤。

配置圖

3.封裝模塊

這里我們會簡述一下三者流程的不同。
微信和QQ的登錄只能通過調(diào)用其客戶端來實(shí)現(xiàn)晌该,所以在iOS上為了審核通過起見肥荔,如果檢測到客戶端沒有安裝,相應(yīng)的按鈕就不要展示(SDK有相應(yīng)方法朝群,詳情見代碼)燕耿。微博可以通過客戶端或者在Web頁面輸入用戶名與密碼兩種方式來登錄。
1.QQ
QQ登錄及登錄后個(gè)人信息的獲取都由其SDK來完成姜胖。先用申請的AppID來實(shí)例化TencentOAuth類誉帅,并設(shè)置權(quán)限,最后通過調(diào)用authorize: inSafari方法來喚起QQ客戶端右莱。我們只用實(shí)現(xiàn)其代理方法蚜锨,來自TencentLoginDelegate協(xié)議,主要代理方法:

tencentDidLogin
登錄成功
getUserInfoResponse
獲得信息成功
tencentDidNotLogin:
用戶取消

2.微信
微信的流程有些不同慢蜓,1亚再,先封裝SendAuthReq實(shí)例對象,并設(shè)置scope和state參數(shù)后晨抡,將其作為參數(shù)來調(diào)用WXApi的公用方法sendReq:氛悬。喚起微信客戶端。2耘柱,客戶端處理完畢后獲得code碼如捅,加上申請的AppID和AppSecret調(diào)用URL接口獲得token、openid帆谍。3.利用這兩個(gè)參數(shù)再調(diào)用一次URL接口來獲得用戶的信息伪朽。
3.微博
微博和微信的處理流程類似,前面提及微博有兩種方式來登錄(其實(shí)分享也是兩種)汛蝙。具體來說(以客戶端為例)1烈涮,實(shí)例化WBAuthorizeRequest對象朴肺,設(shè)置redirectURI、scope和userInfo后坚洽。將其作為WeiboSDK的公用方法sendRequest的參數(shù)來調(diào)起客戶端戈稿。2,從客戶端返回后獲得uid和token后讶舰,作為參數(shù)來調(diào)用URL接口鞍盗,解析結(jié)果獲得用戶信息。如果是手機(jī)沒有安裝客戶端而通過Web登頁面錄的跳昼,我們通過加載特定地址的URL般甲,再用戶登錄成功Web頁面即將跳轉(zhuǎn)時(shí),通過UIWebViewDelegate的代理方法shouldStartLoadWithRequest獲得code碼鹅颊,使用code碼敷存,使用code的調(diào)用URL接口獲得uid和token,剩下的就和客戶端登錄一樣了堪伍。如果簡單一點(diǎn)锚烦,其實(shí)通過設(shè)置WBAuthorizeRequest對象的shouldShowWebViewForAuthIfCannotSSO屬性為YES,也能實(shí)現(xiàn)在沒有安裝客戶端時(shí)自動通過Web方式登錄帝雇。

4.其他

1涮俄,初始化
在啟動時(shí)對微博和微信初始化,在AppDelegate的didFinishLaunchingWithOptions:里面調(diào)用

[WeiboSDK registerApp:WeiboAppidkey];
[WXApi registerApp:WeiXinAppidkey];

2尸闸,SDK處理
通過環(huán)境配置彻亲,使得能從客戶端返回我們App。返回后需要其SDK來處理帶回來的信息室叉,我們在AppDelegate中實(shí)現(xiàn)方法

application:handleOpenURL:

判斷是從那個(gè)客戶端返回的并調(diào)用相應(yīng)的SDK進(jìn)行處理睹栖。在iOS9中這個(gè)方法是

application:openURL:sourceApplication:annotaion:

并且在AppDelegate里面實(shí)現(xiàn)WeiboSDKDelegate的didReceiveWeiboResponse方法來獲得微博的uid和token。實(shí)現(xiàn)WXApiDelegate的onReq:和onResp:方法來獲得微信登錄的code碼茧痕。剩余的步驟就是繼續(xù)通過URL接口調(diào)用來獲得個(gè)人信息了野来。

詳情參見代碼?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市踪旷,隨后出現(xiàn)的幾起案子曼氛,更是在濱河造成了極大的恐慌,老刑警劉巖令野,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀患,死亡現(xiàn)場離奇詭異,居然都是意外死亡气破,警方通過查閱死者的電腦和手機(jī)聊浅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人低匙,你說我怎么就攤上這事旷痕。” “怎么了顽冶?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵欺抗,是天一觀的道長。 經(jīng)常有香客問我强重,道長绞呈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任间景,我火速辦了婚禮佃声,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拱燃。我一直安慰自己秉溉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布碗誉。 她就那樣靜靜地躺著,像睡著了一般父晶。 火紅的嫁衣襯著肌膚如雪哮缺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天甲喝,我揣著相機(jī)與錄音尝苇,去河邊找鬼。 笑死埠胖,一個(gè)胖子當(dāng)著我的面吹牛糠溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播直撤,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼非竿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谋竖?” 一聲冷哼從身側(cè)響起红柱,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蓖乘,沒想到半個(gè)月后锤悄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘉抒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年零聚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隶症,死狀恐怖政模,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沿腰,我是刑警寧澤览徒,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站颂龙,受9級特大地震影響习蓬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜措嵌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一躲叼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧企巢,春花似錦枫慷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笋婿,卻和暖如春誉裆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缸濒。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工足丢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庇配。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓斩跌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捞慌。 傳聞我的和親對象是個(gè)殘疾皇子耀鸦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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