前言
關(guān)于MonkeyKing的使用可以參考前面的兩邊文章以及github地址
1什黑、MonkeyKing第三方分享
2、MonkeyKing第三方授權(quán)登錄
3堪夭、github地址
MonkeyKing的授權(quán)登錄以微信為例愕把,其他的第三方授權(quán)只要是基于OAuth拣凹,都是采用類似的方式進行。
一恨豁、授權(quán)過程
1嚣镜、在項目設(shè)置中設(shè)置微信的URL Schemes,不同的第三方使用的規(guī)則不同橘蜜,比如微信的schemes是使用的我們在微信第三方開發(fā)者帳號為自己應(yīng)用注冊的appId
2菊匿、在應(yīng)用啟動didFinishLaunchingWithOptions方法中注冊微信對應(yīng)的appId和appKey
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
3、發(fā)起微信授權(quán)
MonkeyKing.oauth(for: .weChat) { [weak self] (dictionary, response, error) in
// dictionary包含的信息有 openid,unionid,refresh_token,scope,access_token,expires_in
}
三计福、授權(quán)流程分析
1跌捆、URL Schemes的作用,其實就是從其他app跳轉(zhuǎn)到改應(yīng)用的入口棒搜,如果配置了該協(xié)議疹蛉,那么通過該協(xié)議就可以打開自己的應(yīng)用。比如配置的URL Schemes為MyApp那么通過手機的safari輸入MyApp://就會在瀏覽器中彈出是否打開本應(yīng)用的提示
同樣的力麸,只要清楚了這個原理可款,就很容易知道OAuth授權(quán)的流程
1)應(yīng)用在第1步發(fā)起授權(quán),需要打開第三方應(yīng)用克蚂,如同自己的應(yīng)用設(shè)置scheme一樣闺鲸,如果第三方應(yīng)用沒有設(shè)置URL Scheme,那么應(yīng)用是無法發(fā)起授權(quán)的埃叭。如果手機沒有安裝對應(yīng)的應(yīng)用摸恍,MonkeyKing采用網(wǎng)頁的形式發(fā)起授權(quán)
常見的一些第三方應(yīng)用URL Scheme如下:參考文章
QQ mqq://
微信 weixin://
騰訊微博 TencentWeibo://
淘寶 taobao://
支付寶 alipay://
微博 sinaweibo://
需要在應(yīng)用的info.plist文件中進行配置
2)第2步可能是web授權(quán),也可能是網(wǎng)頁授權(quán)赤屋,也可能是第三方應(yīng)用打開web頁面授權(quán)立镶,不管怎么樣,都會有一個授權(quán)頁面类早,用戶點擊授權(quán)頁面確認按鈕之后媚媒,授權(quán)頁面,或者第三方應(yīng)用會根據(jù)配置的URLScheme或者其他規(guī)則跳轉(zhuǎn)到發(fā)起的應(yīng)用涩僻。比如微信授權(quán)都會為每一個應(yīng)用分配一個appId缭召,應(yīng)用需要將這個appId寫入到URL Schemes中。應(yīng)用發(fā)起微信授權(quán)成功后逆日,微信就會調(diào)用這個appId構(gòu)成的scheme嵌巷,并且附帶一些授權(quán)的參數(shù)打開發(fā)起授權(quán)的應(yīng)用。
比如微信授權(quán)成功之后室抽,會返回一個如下的url:
wx4868b35061f87885://oauth?code=003KLKZ32djWhL0RwHY32LmzZ32KLKZv&state=Weixinauth
用戶取消授權(quán) 會返回:
3)4)5)授權(quán)成功后的url開頭就是我們配置的appId搪哪,code就是我們之后獲取微信授權(quán)需要的code。
在appdelegate中下面方法會攔截到這個url狠半,然后MonkeyKing對這個url進行處理
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
if MonkeyKing.handleOpenURL(url) {
return true
}
return false
}
攔截到url之后噩死,通過前綴和返回的內(nèi)容進行判斷颤难,如果是"wx",并且url中包含"state=Weixinauth"就認為是OAuth授權(quán),如果包含wapoauth就是網(wǎng)頁授權(quán)已维,包含"platformId=wechat"并且不包含state就是授權(quán)失敗
拿到code之后,就可以發(fā)起獲取授權(quán)信息的請求了垛耳,最后將得到的授權(quán)信息回調(diào)栅屏,然后我們就可以通過json獲取到回掉信息,進行下一步處理