Google Drive WebView授权方式实现

由于国内大多数机器都木有安装Google Service框架,也就是说木有办法直接使用Drive SDK进行授权。因此,这一篇文章将介绍如何通过WebView的方式进行Oauth2.0授权码的获取(话说《ES文件浏览器》就是通过这种方式来实现Oauth2.0授权的)。具体的效果是这样的:如果没有登录Google账号,会要求你先登录一次

Google Drive WebView授权方式实现_第1张图片

先来看一下web端account的授权url:

https://accounts.google.com/o/oauth2/auth?
    redirect_uri=https://localhost/&
    response_type=code&
    client_id=xxxxxxxx-xxxxxxx.apps.googleusercontent.com&
    scope=https://www.googleapis.com/auth/drive+
             https://www.googleapis.com/auth/userinfo.profile

几个关键的字段我来解释一下:

  • 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()方法,即可对重定向的地址进行用户点击状态的判断(允许或拒绝)以及状态码的截取。关键代码如下:

webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (url.contains("?code=")) {
            // Get code and continue to auth
        } else if (url.contains("error=access_denied")) {
            // User disallow
        }
    }
});

在取得了授权码code之后,就可以进行后续Oauth2.0中token的请求以及Google API调用了。

参考:
https://developers.google.com/identity/protocols/OAuth2InstalledApp
https://www.learn2crack.com/2014/01/android-oauth2-webview.html

你可能感兴趣的:(Google,webView,Drive)