前言
关于MonkeyKing的使用可以参考前面的两边文章以及github地址
1、MonkeyKing第三方分享
2、MonkeyKing第三方授权登录
3、github地址
MonkeyKing的授权登录以微信为例,其他的第三方授权只要是基于OAuth,都是采用类似的方式进行。
一、授权过程
1、在项目设置中设置微信的URL Schemes,不同的第三方使用的规则不同,比如微信的schemes是使用的我们在微信第三方开发者帐号为自己应用注册的appId
2、在应用启动didFinishLaunchingWithOptions方法中注册微信对应的appId和appKey
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
3、发起微信授权
MonkeyKing.oauth(for: .weChat) { [weak self] (dictionary, response, error) in
// dictionary包含的信息有 openid,unionid,refresh_token,scope,access_token,expires_in
}
三、授权流程分析
1、URL Schemes的作用,其实就是从其他app跳转到改应用的入口,如果配置了该协议,那么通过该协议就可以打开自己的应用。比如配置的URL Schemes为MyApp那么通过手机的safari输入MyApp://就会在浏览器中弹出是否打开本应用的提示
同样的,只要清楚了这个原理,就很容易知道OAuth授权的流程
1)应用在第1步发起授权,需要打开第三方应用,如同自己的应用设置scheme一样,如果第三方应用没有设置URL Scheme,那么应用是无法发起授权的。如果手机没有安装对应的应用,MonkeyKing采用网页的形式发起授权
常见的一些第三方应用URL Scheme如下:参考文章
QQ mqq://
微信 weixin://
腾讯微博 TencentWeibo://
淘宝 taobao://
支付宝 alipay://
微博 sinaweibo://
需要在应用的info.plist文件中进行配置
2)第2步可能是web授权,也可能是网页授权,也可能是第三方应用打开web页面授权,不管怎么样,都会有一个授权页面,用户点击授权页面确认按钮之后,授权页面,或者第三方应用会根据配置的URLScheme或者其他规则跳转到发起的应用。比如微信授权都会为每一个应用分配一个appId,应用需要将这个appId写入到URL Schemes中。应用发起微信授权成功后,微信就会调用这个appId构成的scheme,并且附带一些授权的参数打开发起授权的应用。
比如微信授权成功之后,会返回一个如下的url:
wx4868b35061f87885://oauth?code=003KLKZ32djWhL0RwHY32LmzZ32KLKZv&state=Weixinauth
用户取消授权 会返回:
3)4)5)授权成功后的url开头就是我们配置的appId,code就是我们之后获取微信授权需要的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之后,通过前缀和返回的内容进行判断,如果是"wx",并且url中包含"state=Weixinauth"就认为是OAuth授权,如果包含wapoauth就是网页授权,包含"platformId=wechat"并且不包含state就是授权失败
拿到code之后,就可以发起获取授权信息的请求了,最后将得到的授权信息回调,然后我们就可以通过json获取到回掉信息,进行下一步处理