Google Drive REST API 是否仍需要 GET_ACCOUNTS 权限?

Is GET_ACCOUNTS permission still required for Google Drive REST API?

Google 已弃用 Google 驱动器 Android API.

我们正在迁移到 Google Drive REST API (v3)。

2 年前,我们有使用 Google Drive REST API (v2) 的经验。我们知道 GET_ACCOUNTS 权限是必需的,GoogleAuthUtil.getToken() 才能正常工作 -

当我们查看 Google Drive REST API (v3) - https://github.com/gsuitedevs/android-samples/blob/master/drive/deprecation/app/src/main/AndroidManifest.xml#L5 的示例时,我们注意到 Google 团队确实明确提到了

<!-- Permissions required by GoogleAuthUtil -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

令人惊讶的是,当我们 运行 示例应用程序 (https://github.com/gsuitedevs/android-samples/tree/master/drive/deprecation) 时,Android 6 和 8 没有弹出 运行 时间权限对话框。然而,该应用程序可以正常运行。

我们预计该应用程序将无法运行,因为没有为该应用程序授予 GET_ACCOUNTS 权限。但是,它仍然可以与 Google Drive 服务进行身份验证和通信,没有问题。

这是我目前测试过的

我已经在 Android 5、Android 6 和 Android 8 中进行了测试。没有 运行time GET_ACCOUNTS 权限被授予 Android 6 和 Android 8.

我也在进一步测试,通过从 Manifest 中完全删除 GET_ACCOUNTSMANAGE_ACCOUNTS。不过,Android 5、Android 6 和 Android 8 都是可行的。在运行ning之前,我已经清除了应用程序的缓存和存储空间。


那么,GET_ACCOUNTS 运行时间许可请求是否仍然需要 Google 驱动 REST API 才能工作?

根据 Authorizing and Using REST APIs, it does not seem required - because the GoogleSignInApi 可以使用,它请求 oAuth2 访问范围并且不需要直接访问设备上的功能。它从 Play Services 获取用户帐户,Play Services 知道登录帐户并充当委托人。

刚刚尝试过,唯一的区别是必须将 access-scopes 添加为字符串:

GoogleSignInOptions gso = new GoogleSignInOptions
  .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  .requestScopes(new Scope("https://www.googleapis.com/auth/drive.readonly"))
  .requestEmail()
  .build();

this.mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
...