背景
由于国内大多数机器都木有安装Google Service框架,也就是说木有办法直接使用Drive SDK进行授权。因此,这一篇文章将介绍如何通过WebView的方式进行Oauth2.0授权码的获取(话说《ES文件浏览器》就是通过这种方式来实现Oauth2.0授权的)。具体的效果是这样的:如果没有登录Google账号,会要求你先登录一次
先来看一下web端account的授权url:
1 | https://accounts.google.com/o/oauth2/auth? |
几个关键的字段我来解释一下:
- redirect_uri:定义了授权码code如何发送到你指定的地址中(当用户点击了允许)
- response_type:为固定值code,表示请求授权码
- client_id:在上一篇文章中申请凭证的client id
- scope:申请的权限范围(如上面的scope指定了获取用户drive最高权限以及获取用户信息权限,drive中具体的scope值可以参考官网的说明)
最后直接通过webview.loadUrl(url)
方法就可以直接加载上面的页面了。
为WebView设置自定义WebViewClient
由于Oauth2.0中,验证的第一步就是需要授权码,也就是上面经过重定向返回的code。因此我们必须监听这个重定向url。在WebView
里面,我们可以设置一个WebViewClient
,重写里面的onPageFinished()
方法,即可对重定向的地址进行用户点击状态的判断(允许或拒绝)以及状态码的截取。关键代码如下:
1 | webview.setWebViewClient(new WebViewClient() { |
在取得了授权码code之后,就可以进行后续Oauth2.0中token的请求以及Google API调用了。
参考:
https://developers.google.com/identity/protocols/OAuth2InstalledApp
https://www.learn2crack.com/2014/01/android-oauth2-webview.html