Google Identity Services (GIS) to nowy zestaw interfejsów API, który zapewnia użytkownikom łatwe i bezpieczne logowanie oraz rejestrację. Pakiet jest dostępny w ramach łatwego do wdrożenia pakietu dla deweloperów. Ten dokument zawiera szczegółowe informacje o nowym interfejsie Google Sign-In API (części GIS), którego można używać do rozpoczynania procesu logowania lub rejestracji, gdy użytkownik kliknie przycisk „Zaloguj się przez Google”. Na potrzeby przepływów logowania można używać tego interfejsu API zamiast istniejących interfejsów Google Sign-In API.
Tego interfejsu API należy używać tylko wtedy, gdy użytkownik wyraźnie pokazuje zamiar zalogowania się przez Google. Możesz użyć tego interfejsu API na przykład, gdy użytkownik kliknie przycisk „Zaloguj się przez Google” w swojej aplikacji.
Nie należy używać tego interfejsu API, aby prosić użytkownika o zalogowanie się podczas uruchamiania aplikacji lub w odpowiedzi na inny aktywator, np. dodanie produktu do koszyka. W tych przypadkach użyj logowania i rejestracji jednym dotknięciem.
Gdy uruchomisz proces logowania się przez Google za pomocą nowego interfejsu API, wyświetli się taki interfejs:
Zanim zaczniesz
Skonfiguruj projekt Konsoli interfejsów API Google i skonfiguruj projekt Android Studio.
Przesyłanie prośby o zalogowanie
Aby uruchomić proces logowania się przez Google za pomocą interfejsu Identity API, utwórz obiekt GetSignInRequest
. Następnie użyj wywołania getSignInIntent
do wywołania obiektu SignInClient
. To wywołanie jest asynchroniczne, a w przypadku powodzenia może użyć elementu PendingIntent
, który umożliwi uruchomienie okna.
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);
});
}
Obsługa wyników logowania
W onActivityResult
pobierz SignInCredential
. Obiekt SignInCredential
zwrócony z getSignInCredentialFromIntent
zawiera informacje o prawidłowym logowaniu. Jeśli z jakiegoś powodu użytkownik się nie zaloguje, zostanie zwrócony błąd 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
});
Wynik udanego logowania zawsze zawiera imię i nazwisko użytkownika, adres e-mail oraz adres URL zdjęcia profilowego. Jeśli potrzebujesz dodatkowych informacji, możesz przekierować użytkowników do pełnego przepływu informacji w profilu.