在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)。但是,我无法将插件返回给我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);
}
);
我尝试使用以下代码,但返回以下错误:
"uncatch 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
});
});
我设法找出了问题所在,为什么没有从插件获取服务器AuthCode。有必要在 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);
}
);
感谢您的回复罗乔波
起初,我希望跳过对cordova-plugin-googleplus的需求,而只是使用Cordova/PhoneGap中的gapi
来处理Google的身份验证,但似乎gapi客户端身份验证可能无法在Cordova的file://
协议中工作。
@Joao的答案让我朝着正确的方向前进,但是在检索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花了我一些挖掘才能找到,这意味着我需要添加access_token
gapi.client.setToken({access_token:'abc123456xyz'});
一旦访问令牌附加到 gapi 客户端,我就可以在 Cordova/Phonegap 中使用 gapi:
// Load the YouTube API.
gapi.client.load('youtube', 'v3', function() {
// Do stuff...
};
尝试
window.plugins.googleplus.login(
{
'scopes': 'https://www.googleapis.com/auth/drive.file profile',
'offline': true,
'cookiepolicy': 'none',
'webApiKey': ‘CODE’
}
- 在Chrome扩展内部输出Google API调用
- AngularJS&Google可视化-使用状态更改处理程序(Google API)在HTML页面上查看$sco
- 内容安全策略:无法在Chrome扩展中加载Google API
- Google API 的客户端库不会执行回调
- 在Cordova/Phonegap中使用Google API javascript
- 我应该在Google Api javascript中进行什么更改,以便它只能显示印度城市,而不能落后于州和印度
- 如何使用google-api-javascript-client或“Contacts API版本3.0”从gmail导入
- $http.获取和$http.JSONP未能获得Google API响应
- 从本地HTML / JavaScript(没有Web服务器)访问Google API
- 将PHP集成到Javascript中,使用Google API显示地图标记
- Access Control Allow Origin阻止我访问google api,尽管使用了dataType:
- 如何在js文件中使用Google API
- 使用JavaScript的Google API授权
- php中的google API javascript代码
- 是否可以调用Google API获取地图图像并将图像保存在某个位置
- 我可以将Google API的XML以字符串形式存储在Javascript中吗
- WinRT Javascript 应用程序中的 Google API OAuth 2.0
- 无法让 Google API 映射出现在 Javascript 中
- Google Api - Seperate Object - JavaScript
- Chrome Extension - Javascript Origins for Google API