Android Google Drive Rest API:跳过同意屏幕(硬编码帐户)

时间:2016-06-14 14:35:17

标签: android google-oauth google-drive-android-api

我尝试使用Google云端硬盘来同步某些媒体文件(视频/图片)并在我的Android应用中显示它们。

根据文档(或者至少从第一次阅读中)我已经设法使一切正常,看起来必须始终是同意屏幕用户在选择他的谷歌帐户后,同意应用程序从他的驱动器获取数据。

关键在于,我想“编码”一个以编程方式同意的帐户,因为我们的应用程序始终会从同一帐户中获取媒体。

这可能吗?

PD:不建议任何其他存储服务,Drive是客户的要求。

2 个答案:

答案 0 :(得分:2)

为避免用户同意,您可以使用Service Account

链接中指出,诸如Prediction API和Google Cloud Storage等Google API可以代表您的应用程序执行操作,而无需访问用户信息。在这些情况下,您的应用程序需要向API证明自己的身份,但无需用户同意。同样,在企业方案中,您的应用程序可以请求对某些资源进行委派访问。

对于这些类型的服务器到服务器交互,您需要service account,这是一个属于您的应用程序而不是单个最终用户的帐户。您的应用程序代表服务帐户调用Google API,并且不需要用户同意。 (在非服务帐户方案中,您的应用程序代表最终用户调用Google API,有时需要用户同意。)

您还可以查看此相关的SO问题以获取更多信息。

答案 1 :(得分:0)

最后,我设法让它完全奏效:

  1. 从您的Google开发者控制台创建服务帐户凭据
  2. 以json格式下载您的凭证。
  3. 将文件复制到 assets / res / raw
  4. 将你的json重命名为没有奇怪字符的东西(例如: driveserviceprivatekey.json )。
  5. 列出项目

        InputStream privateJsonStream = dashboardActivity.getResources().openRawResource(R.raw.driveserviceprivatekey);
        GoogleCredential serviceCredential = GoogleCredential.fromStream(privateJsonStream).createScoped(Arrays.asList(SCOPES));
    
  6. 现在您可以按如下方式使用您的云端硬盘服务:

                HttpTransport transport = AndroidHttp.newCompatibleTransport();
                JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
                this.mService = new com.google.api.services.drive.Drive.Builder(
            transport, jsonFactory, null)
            .setHttpRequestInitializer(credential)
            .build();