我有一个 chrome 扩展程序(不是应用程序),它是来自免费第三方的数据的混搭。我不为我的扩展维护服务器。
我可以使用 Google Drive 使用用户帐户保存用户的数据,以便不同计算机共享吗?
我有一个 chrome 扩展程序(不是应用程序),它是来自免费第三方的数据的混搭。我不为我的扩展维护服务器。
我可以使用 Google Drive 使用用户帐户保存用户的数据,以便不同计算机共享吗?
是的你可以!查看其他StackOverflow 答案,该答案解释了如何使用 google-api-javascript-client 库将数据发送到 Google Drive API。
您可能还对这篇解释如何将 Web Intents 和 Google Drive API 混搭的博文感兴趣。
是的,这是一个简短的指南:)
首先,您需要:
您的 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 Drive API!
可以在此处找到使用 Google API 的文档(这不是特定于 Google Drive):
可以在此处找到 Google Drive API 的参考,并在此处找到示例。
注意:与上述文档中使用的方法相比,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))
});
});
进一步阅读:
Nick Park 的回答是正确的,但我已经学会了简单设置项目并不像听起来那么简单的痛苦方式。如果您按照 Chrome 文档中的本教程进行操作,您可能会在第一步中被打脸。
因此,这里是设置项目的回顾,并进行了一些修改以使其正常工作。
展开右下角的欢迎弹出窗口,然后单击退出以恢复到旧视图。
chrome://extensions
,启用开发人员模式并上传解压缩的目录。您应该会看到此页面上的应用程序 ID 与开发人员仪表板中的应用程序 ID 匹配。如果您访问扩展程序的 Chrome 网上商店 URL,例如https://chrome.google.com/webstore/detail/abcdefghjik
,您将看到404 Not Found错误。别担心。您尚未发布您的应用程序,因此该 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 请求的回答进行操作。