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_ACCOUNTS
和MANAGE_ACCOUNTS
来进行进一步测试。不过,Android 5,Android 6和Android 8均可以使用。在运行之前,我已经清除了应用程序的缓存并清除了存储。
那么,是否仍需要GET_ACCOUNTS
运行时权限请求才能使Google Drive REST API正常工作?
答案 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);
...