在 Cordova/Phonegap 中使用 Google API javascript
Using the Google API javascript in Cordova / Phonegap
我正在使用 Cordova 开发应用程序并想将文件保存在 Googe Drive 中。
我使用 cordova-plugin-googleplus (https://github.com/EddyVerbruggen/cordova-plugin-googleplus) 成功登录 Google。但是我无法获得插件 returns 给我 accessToken 或 idToken 所以我可以使用 Google javascript API.
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'webApiKey': ‘CODE’
},
function (obj) {
$scope.$apply(function() {
$scope.srcImage = obj.imageUrl;
$scope.NomeGoogle = obj.displayName;
});
},
function (msg) {
alert('Erro');
alert('error: ' + msg);
}
);
我尝试使用下面的代码,但返回了以下错误:
"Uncaught gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy"
gapi.load('auth2', function() {
gapi.auth2.init({
client_id: 'REVERSED_CLIENTID',
}).then(function(){
auth2 = gapi.auth2.getAuthInstance();
console.log(auth2.isSignedIn.get()); //now this always returns correctly
});
});
尝试
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'cookiepolicy': 'none',
'webApiKey': ‘CODE’
}
我设法找出问题所在,为什么没有从插件中获取 serverAuthCode。
有必要在 Google 开发人员控制台上创建 2 个凭据。第一个必须是 Android,这将用于插件,第二个应该是 Web 应用程序,这是实现 serverAuthCode 所必需的。
代码如下所示
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'webApiKey': ‘REVERSED_CODE of Web App Credential’
},
function (obj) {
$scope.$apply(function() {
$scope.srcImage = obj.imageUrl;
$scope.NomeGoogle = obj.displayName;
});
var data = $.param({
client_id: 'REVERSED_CODE of Web App Credential',
client_secret: 'SECRET_CODE of Web App Credential',
grant_type: 'authorization_code',
code: obj.serverAuthCode
});
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
}
$http.post("https://www.googleapis.com/oauth2/v3/token", data, config).success(function(data, status) {
//data.access_token;
/** from now you can do use of google API **/
})
.error(function(data, status) {
console.log(data);
console.log(status);
});
},
function (msg) {
alert('Erro');
alert('error: ' + msg);
}
);
感谢您的回复 rojobo
起初我希望跳过对 cordova-plugin-googleplus 的需求,只使用 Cordova/PhoneGap 中的 gapi
来处理 Google 的身份验证,但它出现 gapi client authentication may not work within cordova's file://
protocol.
向我发送了正确的方向,但是在检索 access_token
后尝试使用 gapi
时,我一直收到 Invalid cookiePolicy
错误(这是因为我忽略了下面列出的第 2 步,并且在使用 plugini 进行身份验证后,我错误地尝试使用 gapi
).
再次 进行身份验证
有一个步骤(下面提到的#3)我不清楚。要使用 Google 进行身份验证,然后使用 Cordova/PhoneGap 中的 gapi
,这会起作用...
- 使用 cordova-plugin-googleplus 来处理身份验证和访问令牌检索,这里根本不要使用 gapi
- 加载 gapi 客户端库(跳过
gapi.client.init()
调用和所有正常的 gapi 身份验证过程)
- 将我们从插件获得的访问令牌附加到 gapi 客户端,然后根据需要进行 gapi 调用
第 3 步用了 some digging for me to find,这意味着我需要添加 access_token
gapi.client.setToken({access_token:'abc123456xyz'});
将访问令牌附加到 gapi 客户端后,我可以在 Cordova/Phonegap:
中使用 gapi
// Load the YouTube API.
gapi.client.load('youtube', 'v3', function() {
// Do stuff...
};
我正在使用 Cordova 开发应用程序并想将文件保存在 Googe Drive 中。
我使用 cordova-plugin-googleplus (https://github.com/EddyVerbruggen/cordova-plugin-googleplus) 成功登录 Google。但是我无法获得插件 returns 给我 accessToken 或 idToken 所以我可以使用 Google javascript API.
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'webApiKey': ‘CODE’
},
function (obj) {
$scope.$apply(function() {
$scope.srcImage = obj.imageUrl;
$scope.NomeGoogle = obj.displayName;
});
},
function (msg) {
alert('Erro');
alert('error: ' + msg);
}
);
我尝试使用下面的代码,但返回了以下错误:
"Uncaught gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy"
gapi.load('auth2', function() {
gapi.auth2.init({
client_id: 'REVERSED_CLIENTID',
}).then(function(){
auth2 = gapi.auth2.getAuthInstance();
console.log(auth2.isSignedIn.get()); //now this always returns correctly
});
});
尝试
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'cookiepolicy': 'none',
'webApiKey': ‘CODE’
}
我设法找出问题所在,为什么没有从插件中获取 serverAuthCode。 有必要在 Google 开发人员控制台上创建 2 个凭据。第一个必须是 Android,这将用于插件,第二个应该是 Web 应用程序,这是实现 serverAuthCode 所必需的。
代码如下所示
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'webApiKey': ‘REVERSED_CODE of Web App Credential’
},
function (obj) {
$scope.$apply(function() {
$scope.srcImage = obj.imageUrl;
$scope.NomeGoogle = obj.displayName;
});
var data = $.param({
client_id: 'REVERSED_CODE of Web App Credential',
client_secret: 'SECRET_CODE of Web App Credential',
grant_type: 'authorization_code',
code: obj.serverAuthCode
});
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
}
$http.post("https://www.googleapis.com/oauth2/v3/token", data, config).success(function(data, status) {
//data.access_token;
/** from now you can do use of google API **/
})
.error(function(data, status) {
console.log(data);
console.log(status);
});
},
function (msg) {
alert('Erro');
alert('error: ' + msg);
}
);
感谢您的回复 rojobo
起初我希望跳过对 cordova-plugin-googleplus 的需求,只使用 Cordova/PhoneGap 中的 gapi
来处理 Google 的身份验证,但它出现 gapi client authentication may not work within cordova's file://
protocol.
access_token
后尝试使用 gapi
时,我一直收到 Invalid cookiePolicy
错误(这是因为我忽略了下面列出的第 2 步,并且在使用 plugini 进行身份验证后,我错误地尝试使用 gapi
).
有一个步骤(下面提到的#3)我不清楚。要使用 Google 进行身份验证,然后使用 Cordova/PhoneGap 中的 gapi
,这会起作用...
- 使用 cordova-plugin-googleplus 来处理身份验证和访问令牌检索,这里根本不要使用 gapi
- 加载 gapi 客户端库(跳过
gapi.client.init()
调用和所有正常的 gapi 身份验证过程) - 将我们从插件获得的访问令牌附加到 gapi 客户端,然后根据需要进行 gapi 调用
第 3 步用了 some digging for me to find,这意味着我需要添加 access_token
gapi.client.setToken({access_token:'abc123456xyz'});
将访问令牌附加到 gapi 客户端后,我可以在 Cordova/Phonegap:
中使用 gapi// Load the YouTube API.
gapi.client.load('youtube', 'v3', function() {
// Do stuff...
};