關(guān)于MonkeyKing的介紹和使用MonkeyKing進(jìn)行第三方分享可以參考我的上一篇文章箩张。使用MonkeyKing進(jìn)行第三方分享
github地址:https://github.com/nixzhu/MonkeyKing
以微信授權(quán)為例,基本步驟如下
1阿逃、和上一篇配置一樣卧波,設(shè)置第三方賬號的信息时肿,包括appId和appKey,其中appKey是可選了港粱,MonkeyKing提供了使用appId獲取授權(quán)的方式
2嗜侮、appdelegate中處理授權(quán)之后的回調(diào),授權(quán)成功之后啥容,會重新打開發(fā)起授權(quán)的app锈颗,并且微信返回一個url,類型下面的的URL咪惠,獲取到url參數(shù)中的code之后击吱,MonkeyKing重新發(fā)起請求,獲取到用戶的授權(quán)信息遥昧,使用回調(diào)返回給客戶端
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
if MonkeyKing.handleOpenURL(url) {
return true
}
return false
}
wx4868b35061f87885://oauth?code=003pYdaH1Pxrg606pJ8H1u3W9H1pYda6&state=Weixinauth
3覆醇、發(fā)起授權(quán)請求并且處理回調(diào)獲取的授權(quán)信息
MonkeyKing.oauth(for: .weChat) { [weak self] (dictionary, response, error) in
print("error \(String(describing: error))")
}
拿到的授權(quán)信息主要包含如下:
openid
unionid
refresh_token
scope
access_token,
expires_in
做到這里朵纷,需要注意openid與unionid的區(qū)別,在不同的app中永脓,客戶端授權(quán)獲取的openid是不同的袍辞,但是unionid是唯一的,因此對于同一家公司的多個應(yīng)用常摧,如果要共用用戶微信賬戶體系搅吁,需要使用unionid,在做facebook登錄的時候授權(quán)得不到用戶的unionid落午,但是通過二次獲取信息谎懦,可以得到用戶的bussinesscode,這個相當(dāng)于微信的unionid
MonkeyKing的demo中還提供了授權(quán)后獲取用戶基本信息的網(wǎng)絡(luò)處理溃斋,這一步可以放在服務(wù)端去做界拦,將第一步得到的授權(quán)信息發(fā)送給后臺,然后后臺返回用戶的信息也是可以的梗劫。
fileprivate func fetchUserInfo(_ oauthInfo: [String: Any]?) {
guard
let token = oauthInfo?["access_token"] as? String,
let openID = oauthInfo?["openid"] as? String,
let refreshToken = oauthInfo?["refresh_token"] as? String,
let expiresIn = oauthInfo?["expires_in"] as? Int else {
return
}
let userInfoAPI = "https://api.weixin.qq.com/sns/userinfo"
let parameters = [
"openid": openID,
"access_token": token
]
// fetch UserInfo by userInfoAPI
SimpleNetworking.sharedInstance.request(userInfoAPI, method: .get, parameters: parameters, completionHandler: { (userInfo, _, _) in
guard var userInfo = userInfo else {
return
}
userInfo["access_token"] = token
userInfo["openid"] = openID
userInfo["refresh_token"] = refreshToken
userInfo["expires_in"] = expiresIn
print("userInfo \(userInfo)")
})
// More API
// http://mp.weixin.qq.com/wiki/home/index.html
}
拿到的用戶信息中有如下享甸,注意unionid、access_token等信息需要手動拼接到userInfo中
city梳侨、headimgurl枪萄、unionid、privilege猫妙、
openid瓷翻、nickname、language割坠、province齐帚、sex、country
// 然后從上面的拼接中拿到了四個信息access_token彼哼、openid(這個信息重復(fù)了)对妄、refresh_token、expires_in