我有一个chrome扩展程序(不是App),它是来自免费第三方的数据混搭。我没有为我的分机维护服务器。
我可以使用Google驱动器使用用户帐户保存用户数据,因此可以由不同的计算机共享吗?
答案 0 :(得分:17)
是的,你可以!查看其他StackOverflow answer,其中介绍了如何使用google-api-javascript-client库将数据发送到Google Drive API。
您可能还对此blog post感兴趣,解释如何混搭Web Intents和Google Drive API。
答案 1 :(得分:7)
是的,这是一个简短指南:)
首先,您需要:
您的manifest.json现在应该具有一些额外的字段,如下所示:
// manifest.json
"permissions": [
"identity",
"https://www.googleapis.com/*"
],
"oauth2": {
"client_id": "YOUR_CLIENT_ID",
"scopes": [
"https://www.googleapis.com/auth/drive.appdata",
"https://www.googleapis.com/auth/drive.file"
]
},
"key": "YOUR_APPLICATION_KEY",
您现在可以使用Google云端硬盘API!
可以在此处找到使用Google API的文档(并非特定于Google云端硬盘):
可以在here中找到Google Drive API的参考,并在here中找到示例。
注意:与上述文档中使用的方法相比,在chrome扩展程序中,用户身份验证的处理方式可能有所不同。请参阅以下示例,以了解如何使用Chrome Identity API进行身份验证。
要创建文件:
chrome.identity.getAuthToken({interactive: true}, token => {
var metadata = {
name: 'foo-bar.json',
mimeType: 'application/json',
parents: ['appDataFolder'],
};
var fileContent = {
foo: 'bar'
};
var file = new Blob([JSON.stringify(fileContent)], {type: 'application/json'});
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart');
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
var fileId = xhr.response.id;
/* Do something with xhr.response */
};
xhr.send(form);
});
要获取文件内容:
chrome.identity.getAuthToken({interactive: true}, token => {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.googleapis.com/drive/v3/files/YOUR_FILE_ID?alt=media');
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
/* Do something with xhr.response */
};
xhr.send();
});
要覆盖现有文件内容:
chrome.identity.getAuthToken({interactive: true}, token => {
var xhr = new XMLHttpRequest();
xhr.open('PATCH', 'https://www.googleapis.com/upload/drive/v3/files/YOUR_FILE_ID?uploadType=media&access_token=' + token);
xhr.responseType = 'json';
xhr.onload = () => {
/* Do something with xhr.response */
};
xhr.send(JSON.stringify({foo: 'bar'}));
});
注意:以上示例均使用CORS,但您也可以使用javascript客户端库。
例如,要使用库获取文件内容:
gapi.client.init({
apiKey: 'YOUR_API_KEY',
discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest'],
}).then(() => {
chrome.identity.getAuthToken({interactive: true}, token => {
gapi.auth.setToken({
'access_token': token,
});
gapi.client.drive.files.get({
'fileId': 'YOUR_FILE_ID',
'alt': 'media'
}).then(res => console.log(res))
});
});
进一步阅读:
答案 2 :(得分:3)
尼克·帕克(Nick Park)的回答是正确的,但是我已经学会了痛苦的方式,即简单地设置项目并不像听起来那样简单。如果您从Chrome文档中遵循此tutorial,则第一步可能会面面俱到。
因此,这里是对您的项目进行设置的概述,并进行了一些修改以使其能够正常工作。
展开右下角的“欢迎”弹出窗口,然后单击退出以恢复到旧版视图。
chrome://extensions
,启用开发人员模式并上传解压缩的目录。您应该看到此页面上的应用程序ID与开发人员仪表板上的应用程序ID相匹配。如果转到扩展程序的Chrome网络商店URL(例如https://chrome.google.com/webstore/detail/abcdefghjik
),则会看到 404未找到错误。别担心您尚未发布应用,因此该URL当然将不存在。但是,您仍然可以使用应用程序ID向Google OAuth注册未发布的扩展程序。
oauth2
字段并添加以下信息:"oauth2": {
"client_id": <your client id>,
"scopes": ["https://www.googleapis.com/auth/userinfo.email"]
}
请注意,年份是2020年,您不能再像古代文档所述将Scopes字段留空。
您需要添加上述范围,因为您的应用将要求用户选择其Gmail帐户之一。这意味着您的应用将能够查看用户的电子邮件地址,而我们需要对此事事前了解。
这些都是棘手的,耗时的。现在,您可以按照本教程的其余部分,以及尼克·帕克(Nick Park)对想要的任何Google API发出HTTP请求的回答。