我尝试使用Google云端硬盘来同步某些媒体文件(视频/图片)并在我的Android应用中显示它们。
根据文档(或者至少从第一次阅读中)我已经设法使一切正常但,看起来必须始终是同意屏幕用户在选择他的谷歌帐户后,同意应用程序从他的驱动器获取数据。
关键在于,我想“编码”一个以编程方式同意的帐户,因为我们的应用程序始终会从同一帐户中获取媒体。
这可能吗?
PD:不建议任何其他存储服务,Drive是客户的要求。
答案 0 :(得分:2)
为避免用户同意,您可以使用Service Account。
链接中指出,诸如Prediction API和Google Cloud Storage等Google API可以代表您的应用程序执行操作,而无需访问用户信息。在这些情况下,您的应用程序需要向API证明自己的身份,但无需用户同意。同样,在企业方案中,您的应用程序可以请求对某些资源进行委派访问。
对于这些类型的服务器到服务器交互,您需要service account,这是一个属于您的应用程序而不是单个最终用户的帐户。您的应用程序代表服务帐户调用Google API,并且不需要用户同意。 (在非服务帐户方案中,您的应用程序代表最终用户调用Google API,有时需要用户同意。)
您还可以查看此相关的SO问题以获取更多信息。
答案 1 :(得分:0)
最后,我设法让它完全奏效:
列出项目
InputStream privateJsonStream = dashboardActivity.getResources().openRawResource(R.raw.driveserviceprivatekey);
GoogleCredential serviceCredential = GoogleCredential.fromStream(privateJsonStream).createScoped(Arrays.asList(SCOPES));
现在您可以按如下方式使用您的云端硬盘服务:
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
this.mService = new com.google.api.services.drive.Drive.Builder(
transport, jsonFactory, null)
.setHttpRequestInitializer(credential)
.build();