Требуется ли разрешение GET_ACCOUNTS для API Google Drive REST? - PullRequest
0 голосов
/ 27 декабря 2018

Google устарел с Google Drive Android API.

Мы переходим на Google Drive REST API (v3).

2 года назад у нас есть опыт использования Google Drive REST API (v2).Мы знаем, что для правильной работы GoogleAuthUtil.getToken() требуется разрешение GET_ACCOUNTS - 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, мы замечаем, что команда 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. Нет времени выполнения GET_ACCOUNTS разрешение не предоставляется для Android 6 и Android 8.

Я также продолжаю тестирование, полностью удалив GET_ACCOUNTS и MANAGE_ACCOUNTS из Manifest.Тем не менее, Android 5, Android 6 и Android 8 работоспособны.Перед запуском у меня есть чистый кэш и свободное хранилище приложения.


Итак, для работы Google Drive REST API все еще требуется GET_ACCOUNTS запрос на разрешение?

1 Ответ

0 голосов
/ 29 декабря 2018

в соответствии с Авторизация и использование REST API , это не требуется - потому что можно использовать GoogleSignInApi , который запрашивает oAuth2 области доступа и не требует прямого доступак возможностям на устройстве.он получает учетную запись пользователя от 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);
...
...