如今的應(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è)人信息了野来。
詳情參見代碼?