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

时间:2018-12-27 07:08:27

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

Google已弃用Google Drive Android API。

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

2年前,我们拥有使用Google Drive REST API(v2)的经验。我们知道需要GET_ACCOUNTS权限才能使GoogleAuthUtil.getToken()正常工作-Google Drive API - the name must not be empty: null (But I had passed valid account name to GoogleAccountCredential)

当我们查看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云端硬盘服务通信,而不会出现问题。

这是我到目前为止测试过的

我已经在Android 5,Android 6和Android 8中进行了测试。没有为Android 6和Android 8授予运行时GET_ACCOUNTS权限。

我也通过进一步从清单中删除GET_ACCOUNTSMANAGE_ACCOUNTS来进行进一步测试。不过,Android 5,Android 6和Android 8均可以使用。在运行之前,我已经清除了应用程序的缓存并清除了存储。


那么,是否仍需要GET_ACCOUNTS运行时权限请求才能使Google Drive REST API正常工作?

1 个答案:

答案 0 :(得分:3)

根据Authorizing and Using REST APIs似乎不是必需的-因为可以使用GoogleSignInApi,它请求oAuth2访问范围,并且不需要直接访问设备上的功能。它从Play服务获取用户帐户,该服务知道已登录的帐户并充当代理。

只是尝试过,唯一的区别是必须将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);
...