Google Identity Services (GIS) — это новый набор API, который обеспечивает пользователям простой и безопасный вход и регистрацию в удобном для разработчиков пакете. В этом документе подробно описан новый API входа в Google (часть ГИС), который можно использовать для запуска процесса входа или регистрации, когда пользователь нажимает кнопку «Войти с помощью Google». Этот API можно использовать вместо существующих API входа в систему Google для потоков входа.
Этот API следует использовать только в том случае, если пользователь явно выражает намерение войти в систему с помощью Google. Например, используйте этот API, когда они нажимают кнопку «Войти через Google» в вашем приложении.
Не следует использовать этот API, чтобы предлагать пользователю выполнить вход при запуске приложения или в ответ на другой триггер, например добавление товара в корзину. В таких случаях используйте вход и регистрацию в одно касание .
Когда вы запустите процесс входа в Google с новым API, он отобразит следующий пользовательский интерфейс:
Прежде чем начать
Настройте проект консоли Google API и проект Android Studio .
Сделать запрос на вход
Чтобы запустить процесс входа в Google с помощью Identity API, создайте объект GetSignInRequest
. Затем для объекта SignInClient
вызовите getSignInIntent
. Этот вызов является асинхронным, и в случае успеха он предоставит PendingIntent
для запуска диалога.
private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */
private void signIn() {
GetSignInIntentRequest request =
GetSignInIntentRequest.builder()
.setServerClientId(getString(R.string.server_client_id))
.build();
Identity.getSignInClient(activity)
.getSignInIntent(request)
.addOnSuccessListener(
result -> {
try {
startIntentSenderForResult(
result.getIntentSender(),
REQUEST_CODE_GOOGLE_SIGN_IN,
/* fillInIntent= */ null,
/* flagsMask= */ 0,
/* flagsValue= */ 0,
/* extraFlags= */ 0,
/* options= */ null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Google Sign-in failed");
}
})
.addOnFailureListener(
e -> {
Log.e(TAG, "Google Sign-in failed", e);
});
}
Обработка результатов входа в систему
В onActivityResult
получите SignInCredential
. Объект SignInCredential
, возвращаемый из getSignInCredentialFromIntent
содержит информацию о допустимом входе в систему. Если пользователю по какой-либо причине не удается войти в систему, выдается ApiException
.
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
try {
SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
// Signed in successfully - show authenticated UI
updateUI(credential);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
}
}
}
}
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
// handle intent result here
});
В результате успешного входа в систему всегда возвращается полное имя пользователя, адрес электронной почты и URL-адрес изображения профиля. Если вам нужна дополнительная информация, вы можете направить пользователей к полному потоку информации профиля.