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

Android Google Drive Rest API:跳过同意屏幕(硬编码帐户),android,google-oauth,google-drive-android-api,Android,Google Oauth,Google Drive Android Api,我试图使用谷歌硬盘同步一些媒体文件(视频/图像),并在我的android应用程序中显示它们 我已经设法让一切都正常运行了,但是根据文档(或者至少从第一次阅读来看)它看起来总是有一个同意屏幕,用户在选择他的谷歌帐户后,同意应用程序从他的驱动器获取数据 关键是,我想“硬编码”一个在编程上同意这一点的帐户,因为我们的应用程序总是从同一个帐户接收媒体 这可能吗 PD:不要建议任何其他存储服务,驱动器是客户的要求。为了避免用户同意,您可以使用 链接中指出,Google API(如预测API和Google云

我试图使用谷歌硬盘同步一些媒体文件(视频/图像),并在我的android应用程序中显示它们

我已经设法让一切都正常运行了,但是根据文档(或者至少从第一次阅读来看)它看起来总是有一个同意屏幕,用户在选择他的谷歌帐户后,同意应用程序从他的驱动器获取数据

关键是,我想“硬编码”一个在编程上同意这一点的帐户,因为我们的应用程序总是从同一个帐户接收媒体

这可能吗


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

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

链接中指出,Google API(如预测API和Google云存储)可以代表您的应用程序运行,而无需访问用户信息。在这些情况下,您的应用程序需要向API证明自己的身份,但不需要用户同意。类似地,在企业场景中,应用程序可以请求对某些资源的委托访问

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

您还可以查看此相关SO问题以了解更多信息


最后,我终于让它完全正常工作了:

  • 从google开发者控制台创建一个服务帐户凭据
  • 下载json格式的凭证
  • 将文件复制到资产/res/raw
  • 将json重命名为没有weirds字符的内容(例如:driveserviceprivatekey.json)
  • 列表项

        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();