Разрешить доступ к пользовательским данным Google

Аутентификация устанавливает личность пользователя и обычно называется регистрацией или входом в систему. Авторизация — это процесс предоставления или отказа в доступе к данным или ресурсам. Например, ваше приложение запрашивает согласие пользователя на доступ к его Google Диску.

Вызовы аутентификации и авторизации должны представлять собой два отдельных и различных потока в зависимости от потребностей приложения.

Если в вашем приложении есть функции, которые могут использовать данные API Google, но не являются обязательными для основных функций, вам следует разработать приложение так, чтобы оно могло корректно обрабатывать ситуации, когда данные API недоступны. Например, вы можете скрыть список недавно сохранённых файлов, если пользователь не предоставил доступ к Диску.

Запрашивать доступ к областям, необходимым для доступа к API Google, следует только тогда, когда пользователь выполняет действие, требующее доступа к определённому API. Например, запрашивать разрешение на доступ к Диску пользователя следует каждый раз, когда пользователь нажимает кнопку «Сохранить на Диске».

Разделив авторизацию и аутентификацию, вы сможете избежать перегрузки новых пользователей и не запутать их в том, почему у них запрашиваются определенные разрешения.

Для аутентификации мы рекомендуем использовать API Credential Manager . Для авторизации действий, требующих доступа к пользовательским данным, хранящимся в Google, мы рекомендуем использовать AuthorizationClient .

Настройте свой проект

  1. Откройте свой проект в или создайте проект, если у вас его еще нет.
  2. На , убедитесь, что вся информация является полной и точной.
    1. Убедитесь, что вашему приложению назначены правильное название, логотип и домашняя страница. Эти значения будут отображаться пользователям на экране согласия «Войти через Google» при регистрации и на экране «Сторонние приложения и сервисы» .
    2. Убедитесь, что вы указали URL-адреса политики конфиденциальности и условий обслуживания вашего приложения.
  3. В Создайте идентификатор клиента Android для своего приложения, если у вас его ещё нет. Вам потребуется указать имя пакета приложения и подпись SHA-1.
    1. Перейти к .
    2. Нажмите «Создать клиента» .
    3. Выберите тип приложения Android .
  4. В Создайте новый идентификатор клиента «Веб-приложение», если вы ещё этого не сделали. Поля «Авторизованные источники JavaScript» и «Авторизованные URI перенаправления» пока можно игнорировать. Этот идентификатор клиента будет использоваться для идентификации вашего внутреннего сервера при взаимодействии со службами аутентификации Google.
    1. Перейти к .
    2. Нажмите «Создать клиента» .
    3. Выберите тип веб-приложения .

Объявить зависимости

В файле build.gradle вашего модуля объявите зависимости, используя последнюю версию библиотеки Google Identity Services.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

Запрос разрешений, необходимых для действий пользователя

Всякий раз, когда пользователь выполняет действие, требующее дополнительных возможностей, вызывайте AuthorizationClient.authorize() .

Например, если пользователь выполняет действие, требующее доступа к хранилищу приложения Drive, выполните следующие действия:

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

В обратном вызове onActivityResult вашей активности вы можете проверить, были ли успешно получены требуемые разрешения, и если да, выполнить действие пользователя.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}

Если вы обращаетесь к API Google на стороне сервера, вы можете вызвать метод getServerAuthCode() метода AuthorizationResult, чтобы получить код авторизации, который вы отправите на свой бэкэнд для обмена на токен доступа и обновления.