Logowanie przez Google pomaga szybko zintegrować uwierzytelnianie użytkowników z aplikacją na Androida. Użytkownicy mogą używać swojego konta Google, aby logować się w aplikacji, wyrażać zgodę i bezpiecznie udostępniać jej informacje o swoim profilu. Biblioteka Jetpack Credential Manager na Androida ułatwia tę integrację, zapewniając spójne działanie na różnych urządzeniach z Androidem za pomocą jednego interfejsu API.
Z tego dokumentu dowiesz się, jak wdrożyć funkcję Zaloguj się przez Google w aplikacjach na Androida, jak skonfigurować interfejs przycisku Zaloguj się przez Google oraz jak skonfigurować zoptymalizowane pod kątem aplikacji rejestrację i logowanie jednym dotknięciem. Aby ułatwić migrację między urządzeniami, funkcja „Zaloguj się przez Google” obsługuje logowanie automatyczne, a jej wieloplatformowy charakter w przypadku Androida, iOS i internetu pomaga zapewnić dostęp do logowania w aplikacji na dowolnym urządzeniu. Jeśli używasz usługi Uwierzytelnianie Firebase w swojej aplikacji, więcej informacji o integracji logowania przez Google i Menedżera danych logowania znajdziesz w przewodniku Uwierzytelnianie za pomocą Google na Androidzie.
Aby skonfigurować logowanie przez Google, wykonaj te 2 główne czynności:
Skonfiguruj logowanie przez Google jako opcję w interfejsie dolnego arkusza Menedżera danych logowania. Możesz skonfigurować automatyczne wyświetlanie prośby o zalogowanie się. Jeśli masz wdrożone klucze dostępu lub hasła, możesz poprosić o wszystkie odpowiednie typy danych logowania jednocześnie, aby użytkownik nie musiał pamiętać opcji, której użył wcześniej do zalogowania się.

Dodaj przycisk Zaloguj się przez Google do interfejsu aplikacji. Przycisk „Zaloguj się przez Google” umożliwia użytkownikom łatwe rejestrowanie się i logowanie w aplikacjach na Androida za pomocą dotychczasowych kont Google. Jeśli użytkownicy zamkną interfejs arkusza u dołu ekranu lub wyraźnie zechcą użyć konta Google do rejestracji i logowania, klikną przycisk Zaloguj się przez Google. Dla deweloperów oznacza to łatwiejsze wprowadzanie użytkowników i mniejsze trudności podczas rejestracji.

Z tego dokumentu dowiesz się, jak zintegrować przycisk Zaloguj się przez Google i arkusz z dialogiem u dołu ekranu z interfejsem Credential Manager API za pomocą biblioteki pomocniczej Google ID.
Konfigurowanie projektu
- Otwórz projekt w lub utwórz projekt, jeśli jeszcze go nie masz.
- Na stronie upewnij się, że wszystkie informacje są kompletne i prawidłowe.
- Upewnij się, że aplikacja ma przypisaną prawidłową nazwę, logo i stronę główną. Te wartości będą wyświetlane użytkownikom na ekranie zgody funkcji Zaloguj się przez Google podczas rejestracji oraz na ekranie aplikacji i usług innych firm.
- Upewnij się, że masz podane adresy URL polityki prywatności i warunków korzystania z usługi w swojej aplikacji.
- W utwórz identyfikator klienta Androida dla swojej aplikacji, jeśli jeszcze go nie masz. Musisz podać nazwę pakietu aplikacji i podpis SHA-1.
- W sekcji utwórz nowy identyfikator klienta „Aplikacja internetowa”, jeśli jeszcze go nie masz. Pola „Autoryzowane źródła JavaScript” i „Autoryzowane identyfikatory URI przekierowania” możesz na razie zignorować. Ten identyfikator klienta będzie używany do identyfikowania serwera backendu podczas komunikacji z usługami uwierzytelniania Google.
Deklarowanie zależności
W pliku build.gradle modułu zadeklaruj zależności, używając najnowszej wersji Menedżera danych logowania:
dependencies {
// ... other dependencies
implementation "androidx.credentials:credentials:<latest version>"
implementation "androidx.credentials:credentials-play-services-auth:<latest version>"
implementation "com.google.android.libraries.identity.googleid:googleid:<latest version>"
}
Utwórz instancję żądania logowania się przez Google
Aby rozpocząć implementację, utwórz instancję żądania logowania przez Google. Użyj
GetGoogleIdOption
, aby pobrać token identyfikatora Google użytkownika.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Najpierw sprawdź, czy użytkownik ma jakieś konta, które były wcześniej używane do logowania się w Twojej aplikacji. W tym celu wywołaj interfejs API z parametrem setFilterByAuthorizedAccounts
ustawionym na true
. Użytkownicy mogą wybrać konto, na które chcą się zalogować.
Jeśli nie ma dostępnych autoryzowanych kont Google, użytkownik powinien zostać poproszony o zarejestrowanie się przy użyciu dowolnego z dostępnych kont. Aby to zrobić, poproś użytkownika, wywołując ponownie interfejs API i ustawiając wartość setFilterByAuthorizedAccounts
na false
.
Więcej informacji o rejestracji
Włączanie automatycznego logowania dla powracających użytkowników (zalecane)
Deweloperzy powinni włączyć automatyczne logowanie dla użytkowników, którzy rejestrują się przy użyciu jednego konta. Zapewnia to płynną obsługę na różnych urządzeniach, zwłaszcza podczas migracji urządzenia, gdy użytkownicy mogą szybko odzyskać dostęp do konta bez ponownego wpisywania danych logowania. Dla użytkowników eliminuje to niepotrzebne utrudnienia, jeśli byli już wcześniej zalogowani.
Aby włączyć logowanie automatyczne, użyj setAutoSelectEnabled(true)
. Automatyczne logowanie jest możliwe tylko wtedy, gdy spełnione są te kryteria:
- Istnieją pojedyncze dane logowania pasujące do żądania, które mogą być kontem Google lub hasłem, i te dane logowania pasują do konta domyślnego na urządzeniu z Androidem.
- Użytkownik nie wylogował się.
- Użytkownik nie wyłączył logowania automatycznego w ustawieniach konta Google.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Pamiętaj, aby podczas wdrażania automatycznego logowania prawidłowo obsługiwać wylogowywanie, aby użytkownicy mogli zawsze wybrać odpowiednie konto po wyraźnym wylogowaniu się z aplikacji.
Ustawianie wartości nonce w celu zwiększenia bezpieczeństwa
Aby zwiększyć bezpieczeństwo logowania i uniknąć ataków typu replay, dodaj setNonce
, aby uwzględnić w każdym żądaniu wartość nonce. Więcej informacji o generowaniu nonce
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
// nonce string to use when generating a Google ID token
.setNonce(nonce)
.build()
Tworzenie procedury logowania się przez Google
Aby skonfigurować proces logowania przez Google, wykonaj te czynności:
- Utwórz instancję
GetCredentialRequest
, a następnie dodaj utworzony wcześniejgoogleIdOption
, używającaddCredentialOption()
, aby pobrać dane logowania. - Przekaż to żądanie do wywołania
getCredential()
(Kotlin) lubgetCredentialAsync()
(Java), aby pobrać dostępne dane logowania użytkownika. - Po pomyślnym wywołaniu interfejsu API wyodrębnij
CustomCredential
, które zawiera wynik dla danychGoogleIdTokenCredential
. - Typ parametru
CustomCredential
powinien być równy wartości parametruGoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
. Przekształć obiekt wGoogleIdTokenCredential
za pomocą metodyGoogleIdTokenCredential.createFrom
. Jeśli konwersja się powiedzie, wyodrębnij
GoogleIdTokenCredential
ID, sprawdź jego poprawność i uwierzytelnij dane logowania na serwerze.Jeśli konwersja się nie powiedzie i zostanie wyświetlony komunikat
GoogleIdTokenParsingException
, może być konieczne zaktualizowanie wersji biblioteki logowania przez Google.Wykrywanie nierozpoznanych typów niestandardowych danych logowania.
val request: GetCredentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
coroutineScope {
try {
val result = credentialManager.getCredential(
request = request,
context = activityContext,
)
handleSignIn(result)
} catch (e: GetCredentialException) {
// Handle failure
}
}
fun handleSignIn(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
val responseJson: String
when (credential) {
// Passkey credential
is PublicKeyCredential -> {
// Share responseJson such as a GetCredentialResponse to your server to validate and
// authenticate
responseJson = credential.authenticationResponseJson
}
// Password credential
is PasswordCredential -> {
// Send ID and password to your server to validate and authenticate.
val username = credential.id
val password = credential.password
}
// GoogleIdToken credential
is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract the ID to validate and
// authenticate on your server.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)
// You can use the members of googleIdTokenCredential directly for UX
// purposes, but don't use them to store or control access to user
// data. For that you first need to validate the token:
// pass googleIdTokenCredential.getIdToken() to the backend server.
// see [validation instructions](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token)
} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
} else {
// Catch any unrecognized custom credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
}
Wywoływanie procedury przycisku Zaloguj się przez Google
Aby wywołać przepływ przycisku Zaloguj się przez Google, użyj
GetSignInWithGoogleOption
zamiast
GetGoogleIdOption
:
val signInWithGoogleOption: GetSignInWithGoogleOption = GetSignInWithGoogleOption.Builder(
serverClientId = WEB_CLIENT_ID
).setNonce(nonce)
.build()
Obsłuż zwrócony obiekt GoogleIdTokenCredential
zgodnie z opisem w tym przykładzie kodu.
fun handleSignInWithGoogleOption(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
when (credential) {
is CustomCredential -> {
if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
// Use googleIdTokenCredential and extract id to validate and
// authenticate on your server.
val googleIdTokenCredential = GoogleIdTokenCredential
.createFrom(credential.data)
} catch (e: GoogleIdTokenParsingException) {
Log.e(TAG, "Received an invalid google id token response", e)
}
}
else {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential")
}
}
}
Po utworzeniu instancji żądania logowania przez Google uruchom proces uwierzytelniania w sposób podobny do opisanego w sekcji Logowanie przez Google.
Włączanie rejestracji nowych użytkowników (zalecane)
Funkcja Zaloguj się przez Google to najprostszy sposób na utworzenie nowego konta w aplikacji lub usłudze za pomocą kilku kliknięć.
Jeśli nie znaleziono zapisanych danych logowania (funkcja
getGoogleIdOption
nie zwróciła żadnych kont Google), poproś użytkownika o zarejestrowanie się. Najpierw sprawdź, czy istnieją jakieś wcześniej używane konta.setFilterByAuthorizedAccounts(true)
Jeśli nie znajdziesz żadnego konta, poproś użytkownika o zarejestrowanie się za pomocą konta Google, używając setFilterByAuthorizedAccounts(false)
.
Przykład:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID)
.build()
Po utworzeniu instancji żądania rejestracji za pomocą Google uruchom proces uwierzytelniania. Jeśli użytkownicy nie chcą rejestrować się za pomocą funkcji Zaloguj się przez Google, możesz zoptymalizować aplikację pod kątem automatycznego wypełniania. Gdy użytkownik utworzy konto, rozważ zarejestrowanie go w kluczach dostępu jako ostatni krok procesu tworzenia konta.
Obsługa wylogowania
Gdy użytkownik wyloguje się z aplikacji, wywołaj metodę interfejsu API clearCredentialState()
, aby wyczyścić stan bieżących danych logowania użytkownika u wszystkich dostawców danych logowania.
Spowoduje to powiadomienie wszystkich dostawców danych logowania, że należy usunąć wszystkie zapisane sesje danych logowania dla danej aplikacji.
Dostawca danych logowania może mieć zapisaną aktywną sesję danych logowania i używać jej do ograniczania opcji logowania w przyszłych wywołaniach funkcji get-credential. Może na przykład traktować aktywne dane logowania jako ważniejsze od innych dostępnych danych logowania. Gdy użytkownik wyraźnie wyloguje się z aplikacji, a następnym razem będzie chciał skorzystać z pełnego zakresu opcji logowania, wywołaj ten interfejs API, aby dostawca mógł wyczyścić zapisaną sesję danych logowania.