【问题标题】:com.google.android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS is not available on this devicecom.google.android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS 在此设备上不可用
【发布时间】:2020-09-08 13:49:29
【问题描述】:

这就是故事。大约三年前,我已将 Google Drive Android SDK (8.1.0) 集成到我的应用程序 (AnyCopy) 中。我按照教程正确设置,包括添加凭据和 api 密钥。一切正常。我可以毫无问题地备份和恢复我的数据。即使在今天,如果我从 Google Play 下载它也可以正常工作。

最近我一直在尝试重构 AnyCopy 并将最新的 Google Drive Android SDK(Google Play 服务版本号 12.0.1)集成到我的应用程序中,并遇到一个奇怪的消息错误

java.util.concurrent.ExecutionException: com.google.android.gms.common.api.ApiException:17:API: Drive.API_CONNECTIONLESS 在此设备上不可用。 在 com.google.android.gms.tasks.Tasks.zzc(未知来源) 在 com.google.android.gms.tasks.Tasks.await(未知来源)

但是,如果我在 Google Console 上使用不同的签名密钥创建新凭据。问题就解决了。我意识到问题源于凭据配置。但是,我无法弄清楚如何解决它,因为它可能是 Google Drive SDK 向后兼容错误。还有其他人遇到过这个问题吗?任何建议他都会非常感激。

【问题讨论】:

    标签: android google-drive-api google-play-services backwards-compatibility google-drive-android-api


    【解决方案1】:

    我有同样的错误。我创建了一个新项目并获得了 google API 的凭据,但忘记启用 Google Drive API。转到仪表板并启用 google drive API 就可以了。 希望对您有所帮助。

    【讨论】:

    • 您是否使用 OAuth 访问 GDrive?我看到并且没有看到任何“启用 Gdrive API”选项
    • 我还可以看到控制台中启用了GDrive API,所以还有其他原因导致OP中的错误
    【解决方案2】:

    您使用的新 API 仍然有旧版本的实例和文件夹。您只需从 Android 切换到您的项目和外部库即可进行检查。如果存在该 api 的旧版本,请尝试使用 refractor 并清理项目并重新构建它。希望它适合您的关注。肯定是向后兼容性问题。

    【讨论】:

      【解决方案3】:

      在我的情况下发生的情况是,我设置的授权范围与 DriveClient 对象支持的范围不同,只有 drives.filedrive.appfolder强> 如你所见here:

      注意:Google Drive Android API 目前仅支持 drive.file 和 drive.appfolder 授权范围。如果您的应用需要 云端硬盘中尚不可用的其他权限或功能 Android API,您必须使用 Google APIs Java Client。

      就我而言,我试图使用完整的驱动器访问权限,但该错误与连接类型并没有真正的关系。我是通过查看CommonStatusCodes class 找到的。

      为了解决这个问题,我刚刚删除了所有其他范围,只留下了 drives.file。 您可能需要,也可能不需要:D,需要撤销访问权限并从您的应用中注销用户,然后重新登录并再次请求访问他们的谷歌驱动器。

      如果您使用的是 firebase,您的代码会看起来像这样:

      AuthUI.IdpConfig.GoogleBuilder()
                          .setScopes(Arrays.asList(Scopes.DRIVE_FILE))
                          .build()
      

      但如果你只直接使用GoogleSignInClient,它看起来像这样:

      GoogleSignInOptions signInOptions =
                  new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                          .requestScopes(Drive.SCOPE_FILE)
                          .build();
      GoogleSignIn.getClient(this, signInOptions)
      

      如果您需要的不仅仅是访问 filesappfolder,您将无法使用 DriveClient 类,并且根据他们的文档,需要 Connecting and Authorizing with the Google APIs Java Client.

      我真的希望对您有所帮助,不幸的是,我已经浪费了几个小时才注意到这一点。

      谢谢,

      【讨论】:

      • 您通过 CommonStatusCodes 究竟发现了什么?是什么代码让您认为它与“完全访问”问题有关。当我在 API 控制台/同意屏幕中查看我的 OAuth 权限时,我可以看到:openid、profile、auth/drive.file。我想,所有这些都是 OAuth 工作所必需的。
      猜你喜欢
      • 2021-12-02
      • 2018-06-17
      • 2016-09-22
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多