我们正在尝试创建一个需要Google云端硬盘服务的应用,因此需要进行身份验证。
应用程序在网络服务器上运行,遵循此网址中的步骤:https://developers.google.com/drive/web/quickstart/quickstart-js我们使用了网址中显示的代码。 但是,在移动设备上,使用相同的步骤,我们为已安装的应用程序创建了另一个客户端ID,但我们无法访问Google服务。 (我们得到一个空白的屏幕)。
此外,我们测试了另一个也从Google中提取的示例代码,它通过我们的CUSTOMER_ID
和REDIRECT_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);
});
});
});
答案 0 :(得分:2)
您可以使用OAuth的网络和移动SDK之一从Android应用程序获得授权使用Google云端硬盘,这最近帮助了我:https://oauth.io/。您可以使用Google Development Console中的网络凭据在OAuth上注册您的应用,然后他们会提供移动SDK,以便您可以成功访问身份验证。