Аутентификация устанавливает личность пользователя и обычно называется регистрацией или входом пользователя. Авторизация — это процесс предоставления или отклонения доступа к данным или ресурсам. Например, ваше приложение запрашивает согласие пользователя на доступ к его Google Диску.
Вызовы аутентификации и авторизации должны представлять собой два отдельных и различных потока в зависимости от потребностей приложения.
Если в вашем приложении есть функции, которые могут использовать данные API Google, но не являются обязательными как часть основных функций вашего приложения, вам следует разработать приложение так, чтобы оно могло изящно обрабатывать случаи, когда данные API недоступны. Например, вы можете скрыть список недавно сохраненных файлов, если пользователь не предоставил доступ к Диску.
Вам следует запрашивать доступ к областям, которые вам нужны для доступа к API Google, только когда пользователь выполняет действие, требующее доступа к определенному API. Например, вам следует запрашивать разрешение на доступ к Диску пользователя всякий раз, когда пользователь нажимает кнопку «Сохранить на Диске».
Разделив авторизацию и аутентификацию, вы сможете избежать перегрузки новых пользователей или путаницы с тем, почему у них запрашиваются определенные разрешения.
Для аутентификации мы рекомендуем использовать API Credential Manager . Для авторизации действий, которым необходим доступ к пользовательским данным, хранящимся в Google, мы рекомендуем использовать AuthorizationClient .
Настройте свой проект
- Откройте свой проект в или создайте проект, если у вас его еще нет.
- На , убедитесь, что вся информация является полной и точной.
- Убедитесь, что вашему приложению назначены правильное имя приложения, логотип приложения и домашняя страница приложения. Эти значения будут представлены пользователям на экране согласия «Войти с Google» при регистрации и на экране «Сторонние приложения и службы» .
- Убедитесь, что вы указали URL-адреса политики конфиденциальности и условий обслуживания вашего приложения.
- В , создайте идентификатор клиента Android для вашего приложения, если у вас его еще нет. Вам нужно будет указать имя пакета вашего приложения и подпись SHA-1.
- В , создайте новый идентификатор клиента "Веб-приложение", если вы этого еще не сделали. Пока можете игнорировать поля "Авторизованные источники JavaScript" и "Авторизованные URI перенаправления". Этот идентификатор клиента будет использоваться для идентификации вашего внутреннего сервера при его взаимодействии со службами аутентификации Google.
Объявить зависимости
В файле 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, чтобы получить код аутентификации, который вы отправляете на свой бэкэнд для обмена на токен доступа и обновления.