Che*_*eng 9 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 - 名称不能为空:null(但我已将有效的帐户名称传递给GoogleAccountCredential)
当我们查看Google Drive REST API(v3)的示例 - https://github.com/gsuitedevs/android-samples/blob/master/drive/deprecation/app/src/main/AndroidManifest.xml#L5时,我们注意到谷歌团队确实明确提到过
<!-- Permissions required by GoogleAuthUtil -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当我们运行示例应用程序(https://github.com/gsuitedevs/android-samples/tree/master/drive/deprecation)时,Android 6和8没有弹出运行时权限对话框.但是,该应用程序可以正常工作.
我们预计应用程序无法正常运行,因为没有GET_ACCOUNTS为该应用授予任何权限.但是,它仍可以使用Google云端硬盘服务进行身份验证和通信,而不会出现问题.
我已经在Android 5,Android 6和Android 8中进行了测试.没有GET_ACCOUNTS为Android 6和Android 8授予运行时权限.
我也进一步的测试,通过移除GET_ACCOUNTS并MANAGE_ACCOUNTS从清单完全.不过,Android 5,Android 6和Android 8都可行.在运行之前,我有清晰的缓存和清晰的应用程序存储空间.
那么,GET_ACCOUNTSGoogle Drive REST API仍然需要运行时权限请求吗?
根据Authorizing and Using REST APIs,它似乎不需要 - 因为可以使用GoogleSignInApi,它请求oAuth2访问范围并且不需要直接访问设备上的功能。它从 Play 服务获取用户帐户,该服务知道登录的帐户并充当代理。
刚刚尝试过,唯一的区别是必须将访问范围添加为字符串:
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);
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |