如何将凭据硬编码到我的Google云端硬盘服务中,以便应用的用户无需使用身份验证即可访问我的文件?
我找到了使用Java SKD的解决方案,但这些库在Android上运行不正常:https://developers.google.com/drive/service-accounts#use_service_accounts_as_application-owned_accounts
是否有成功尝试类似任务的例子?
答案 0 :(得分:3)
好的,我找到了解决问题的方法。
当然我的应用程序是Android版本,我不想让用户登录/使用任何凭据连接到我的云端硬盘,最后我可以使用默认的云端硬盘网络应用来操作文件。
实施云服务获取器:
public Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(G_SERVICE_EMAIL)
.setServiceAccountScopes(DriveScopes.DRIVE)
.setServiceAccountPrivateKeyFromP12File(PKC_12_FILE)
.build();
Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
.setHttpRequestInitializer(credential)
.build();
return service;
}
G_SERVICE_EMAIL 是来自 API访问网站的电子邮件地址,而 PKC_12_FILE 是以前下载的私钥。
允许您的服务访问云端硬盘中的文件夹:在Drive app中共享文件夹选项,允许用户使用电子邮件: G_SERVICE_EMAIL 读/写访问权限。
private File getTempPkc12File() throws IOException {
InputStream pkc12Stream = getAssets().open("this-is-your-unique-hash-privatekey.p12");
File tempPkc12File = File.createTempFile("temp_pkc12_file", "p12");
OutputStream tempFileStream = new FileOutputStream(tempPkc12File);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = pkc12Stream.read(bytes)) != -1) {
tempFileStream.write(bytes, 0, read);
}
return tempPkc12File;
}
答案 1 :(得分:0)
你可能不想这样做。如果您有访问令牌,则始终可以将其作为URL参数access_token=MY_ACCESS_TOKEN
添加到请求URL。