使用Android安装的应用程序连接谷歌驱动器

时间:2014-07-24 07:21:23

标签: cordova oauth oauth-2.0 google-drive-api

我们正在尝试创建一个需要Google云端硬盘服务的应用,因此需要进行身份验证。

应用程序在网络服务器上运行,遵循此网址中的步骤:https://developers.google.com/drive/web/quickstart/quickstart-js我们使用了网址中显示的代码。 但是,在移动设备上,使用相同的步骤,我们为已安装的应用程序创建了另一个客户端ID,但我们无法访问Google服务。 (我们得到一个空白的屏幕)。

此外,我们测试了另一个也从Google中提取的示例代码,它通过我们的CUSTOMER_IDREDIRECT_URI " urn:ietf:wg:oauth连接到Google服务: 2.0:oob" 我们在屏幕上收到了这条消息:

Please copy this code, switch to your application and past it there

4/v..........

在阅读Google文档后,我们建议将":auto"添加到REDIRECT_URI(这将成为 " urn:ietf:wg:oauth:2.0: oob:auto" )关闭该窗口并使用经过验证的授权返回我们的应用程序,但Google的窗口无法关闭,我们收到此消息:

Permission has been granted correctly.

Changes to your application

这是我们使用的代码:

var googleapi = {
    authorize: function(options) {
        var deferred = $.Deferred();
        //Build the OAuth consent page URL
        var authUrl = 'https://accounts.google.com/o/oauth2/auth?'
                + $.param({
            client_id: options.client_id,
            redirect_uri: options.redirect_uri,
            response_type: 'code',
            scope: options.scope
        });
        //Open the OAuth consent page in the InAppBrowser
        var authWindow = window.open(authUrl, '_blank',
            'location=no,toolbar=no');
        $(authWindow).on('loadstart', function(e) {
            var url = e.originalEvent.url;
            var code = /\?code=(.+)$/.exec(url);
            var error = /\?error=(.+)$/.exec(url);
            if (code || error) {
                //Always close the browser when match is found
                authWindow.close();
            }
            if (code) {
                //Exchange the authorization code for an access token
                $.post('https://accounts.google.com/o/oauth2/token', {
                    code: code[1],
                    client_id: options.client_id,
                    client_secret: options.client_secret,
                    redirect_uri: options.redirect_uri,
                    grant_type: 'authorization_code'
                }).done(function(data) {
                    deferred.resolve(data);
                    authWindow.close();
                }).fail(function(response) {
                    deferred.reject(response.responseJSON);
                });
            } else if (error) {
                //The user denied access to the app
                deferred.reject({
                    error: error[1]
                });
            }
        });
        return deferred.promise();
    }
};
$(document).on('deviceready', function() {
    var $loginButton = $('#login a');
    var $loginStatus = $('#login p');
    $loginButton.on('click', function() {
        googleapi.authorize({
            client_id: '******************.apps.googleusercontent.com',
            client_secret: '************************',
            redirect_uri: 'urn:ietf:wg:oauth:2.0:oob:auto',
            scope: 'https://www.googleapis.com/auth/analytics.readonly'
        }).done(function(data) {
            $loginStatus.html('Access Token: ' + data.access_token);
        }).fail(function(data) {
            $loginStatus.html(data.error);
        });
    });
});

1 个答案:

答案 0 :(得分:2)

您可以使用OAuth的网络和移动SDK之一从Android应用程序获得授权使用Google云端硬盘,这最近帮助了我:https://oauth.io/。您可以使用Google Development Console中的网络凭据在OAuth上注册您的应用,然后他们会提供移动SDK,以便您可以成功访问身份验证。