Mit Über Google anmelden können Sie die Nutzerauthentifizierung schnell in Ihre Android-App einbinden. Nutzer können sich mit ihrem Google-Konto in Ihrer App anmelden, ihre Einwilligung erteilen und ihre Profilinformationen sicher mit Ihrer App teilen. Die Jetpack-Bibliothek „Credential Manager“ von Android ermöglicht eine reibungslose Integration und bietet mit einer einzigen API eine einheitliche Oberfläche auf allen Android-Geräten.
In diesem Dokument erfahren Sie, wie Sie „Über Google anmelden“ in Android-Apps implementieren, die Benutzeroberfläche der Schaltfläche „Über Google anmelden“ einrichten und die app-optimierte Registrierung und Anmeldung mit One Tap konfigurieren. Für eine reibungslose Gerätemigration unterstützt „Über Google anmelden“ die automatische Anmeldung. Dank der plattformübergreifenden Unterstützung von Android, iOS und Weboberflächen können Sie den Anmeldezugriff für Ihre App auf jedem Gerät ermöglichen.
So richten Sie die Funktion „Über Google anmelden“ ein:
„Über Google anmelden“ als Option für die Benutzeroberfläche des unteren Sheets des Anmeldedaten-Managers konfigurieren Sie können festlegen, dass der Nutzer automatisch zur Anmeldung aufgefordert wird. Wenn Sie entweder Passkeys oder Passwörter implementiert haben, können Sie alle relevanten Anmeldedatentypen gleichzeitig anfordern, damit sich der Nutzer nicht an die Option erinnern muss, die er zuvor für die Anmeldung verwendet hat.
Fügen Sie der Benutzeroberfläche Ihrer App die Schaltfläche „Über Google anmelden“ hinzu. Die Schaltfläche „Über Google anmelden“ bietet Nutzern eine optimierte Möglichkeit, sich mit ihren bestehenden Google-Konten in Android-Apps zu registrieren oder anzumelden. Nutzer klicken auf die Schaltfläche „Über Google anmelden“, wenn sie die Benutzeroberfläche des unteren Sheets schließen oder ihr Google-Konto ausdrücklich für die Registrierung und Anmeldung verwenden möchten. Für Entwickler bedeutet das ein einfacheres Onboarding und weniger Probleme bei der Registrierung.
In diesem Dokument wird beschrieben, wie Sie die Schaltfläche „Über Google anmelden“ und das Dialogfeld für das untere Steuerfeld mit der Credential Manager API mithilfe der Google ID-Hilfsbibliothek integrieren.
Google API Console-Projekt einrichten
- Öffnen Sie Ihr Projekt in der API Console oder erstellen Sie ein Projekt, falls Sie noch keines haben.
- Achten Sie darauf, dass alle Informationen auf dem OAuth-Zustimmungsbildschirm vollständig und korrekt sind.
- Achten Sie darauf, dass Ihrer App der richtige App-Name, das richtige App-Logo und die richtige App-Startseite zugewiesen sind. Diese Werte werden Nutzern beim Anmelden auf dem Einwilligungsbildschirm für „Über Google anmelden“ und auf dem Bildschirm Drittanbieter-Apps und ‐Dienste angezeigt.
- Achten Sie darauf, dass Sie die URLs der Datenschutzerklärung und der Nutzungsbedingungen Ihrer App angegeben haben.
- Erstellen Sie auf der Seite „Anmeldedaten“ eine Android-Client-ID für Ihre App, falls Sie noch keine haben. Sie müssen den Paketnamen und die SHA-1-Signatur Ihrer App angeben.
- Rufen Sie die Seite Anmeldedaten auf.
- Klicken Sie auf Anmeldedaten erstellen > OAuth-Client-ID.
- Wählen Sie den Anwendungstyp Android aus.
- Erstellen Sie auf der Seite „Anmeldedaten“ eine neue Client-ID vom Typ „Webanwendung“, falls noch nicht geschehen. Die Felder „Autorisierte JavaScript-Quellen“ und „Autorisierte Weiterleitungs-URIs“ können Sie vorerst ignorieren. Anhand dieser Client-ID wird Ihr Backend-Server identifiziert, wenn er mit den Authentifizierungsdiensten von Google kommuniziert.
- Rufen Sie die Seite Anmeldedaten auf.
- Klicken Sie auf Anmeldedaten erstellen > OAuth-Client-ID.
- Wählen Sie den Webanwendungstyp aus.
Abhängigkeiten deklarieren
Deklarieren Sie in der build.gradle-Datei Ihres Moduls Abhängigkeiten mit der aktuellen Version des Anmeldedaten-Managers:
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>"
}
Google Sign-in-Anfrage erstellen
Beginnen Sie mit der Implementierung, indem Sie eine Google-Anmeldungsanfrage erstellen. Verwende GetGoogleIdOption
, um das Google-ID-Token eines Nutzers abzurufen.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
.setNonce(<nonce string to use when generating a Google ID token>)
.build()
Prüfen Sie zuerst, ob der Nutzer Konten hat, mit denen er sich bereits in Ihrer App angemeldet hat. Rufen Sie dazu die API mit dem Parameter setFilterByAuthorizedAccounts
auf, der auf true
festgelegt ist. Nutzer können sich für die Anmeldung für eines der verfügbaren Konten entscheiden.
Wenn keine autorisierten Google-Konten verfügbar sind, sollte der Nutzer aufgefordert werden, sich mit einem seiner verfügbaren Konten anzumelden. Dazu musst du den Nutzer auffordern, indem du die API noch einmal aufrufst und setFilterByAuthorizedAccounts
auf false
festlegst.
Weitere Informationen zur Registrierung
Automatische Anmeldung für wiederkehrende Nutzer aktivieren (empfohlen)
Entwickler sollten die automatische Anmeldung für Nutzer aktivieren, die sich mit ihrem einzigen Konto registrieren. Das ermöglicht eine nahtlose Nutzung auf verschiedenen Geräten, insbesondere bei der Gerätemigration, bei der Nutzer schnell wieder auf ihr Konto zugreifen können, ohne Anmeldedaten noch einmal eingeben zu müssen. Für Ihre Nutzer wird dadurch unnötige Reibung vermieden, wenn sie bereits zuvor angemeldet waren.
Verwenden Sie setAutoSelectEnabled(true)
, um die automatische Anmeldung zu aktivieren. Die automatische Anmeldung ist nur möglich, wenn die folgenden Kriterien erfüllt sind:
- Es gibt nur eine Anmeldedatenanfrage, die mit der Anfrage übereinstimmt. Das kann ein Google-Konto oder ein Passwort sein. Diese Anmeldedaten stimmen mit dem Standardkonto auf dem Android-Gerät überein.
- Der Nutzer hat sich nicht explizit abgemeldet.
- Der Nutzer hat die automatische Anmeldung in den Google-Kontoeinstellungen nicht deaktiviert.
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
.setNonce(<nonce string to use when generating a Google ID token>)
.build()
Denken Sie daran, die Abmeldung richtig zu behandeln, wenn Sie die automatische Anmeldung implementieren, damit Nutzer immer das richtige Konto auswählen können, nachdem sie sich explizit von Ihrer App abgemeldet haben.
Nonce festlegen, um die Sicherheit zu verbessern
Um die Sicherheit bei der Anmeldung zu verbessern und Replay-Angriffe zu vermeiden, fügen Sie setNonce
hinzu, um in jeder Anfrage eine Nonce anzugeben. Weitere Informationen zum Generieren eines Nonces
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setServerClientId(WEB_CLIENT_ID)
.setAutoSelectEnabled(true)
.setNonce(<nonce string to use when generating a Google ID token>)
.build()
Ablauf „Über Google anmelden“ erstellen
So richten Sie einen „Über Google anmelden“-Vorgang ein:
- Erstellen Sie eine Instanz von
GetCredentialRequest
und fügen Sie dann die zuvor erstelltegoogleIdOption
mitaddCredentialOption()
hinzu, um die Anmeldedaten abzurufen. - Übergeben Sie diese Anfrage an den Aufruf
getCredential()
(Kotlin) odergetCredentialAsync()
(Java), um die verfügbaren Anmeldedaten des Nutzers abzurufen. - Wenn die API erfolgreich war, extrahiere die
CustomCredential
, die das Ergebnis fürGoogleIdTokenCredential
-Daten enthält. - Der Typ für
CustomCredential
sollte dem Wert vonGoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
entsprechen. Wandeln Sie das Objekt mit der MethodeGoogleIdTokenCredential.createFrom
in einGoogleIdTokenCredential
-Objekt um. Wenn die Umwandlung erfolgreich war, extrahiere die
GoogleIdTokenCredential
-ID, überprüfe sie und authentifiziere die Anmeldedaten auf deinem Server.Wenn die Conversion mit
GoogleIdTokenParsingException
fehlschlägt, müssen Sie möglicherweise die Version der Über Google anmelden-Bibliothek aktualisieren.Unbekannte benutzerdefinierte Anmeldedatentypen erfassen
val request: GetCredentialRequest = Builder()
.addCredentialOption(googleIdOption)
.build()
coroutineScope.launch {
try {
val result = credentialManager.getCredential(
request = request,
context = activityContext,
)
handleSignIn(result)
} catch (e: GetCredentialException) {
handleFailure(e)
}
}
fun handleSignIn(result: GetCredentialResponse) {
// Handle the successfully returned credential.
val credential = result.credential
when (credential) {
// Passkey credential
is PublicKeyCredential -> {
// Share responseJson such as a GetCredentialResponse on 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.
GoogleIdTokenVerifier verifier = ... // see validation instructions
GoogleIdToken idToken = verifier.verify(idTokenString);
// To get a stable account identifier (e.g. for storing user data),
// use the subject ID:
idToken.getPayload().getSubject()
} 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")
}
}
}
Ablauf der Schaltfläche „Über Google anmelden“ auslösen
Wenn Sie den Ablauf der Schaltfläche „Über Google anmelden“ auslösen möchten, verwenden Sie GetSignInWithGoogleOption
anstelle von GetGoogleIdOption
:
val signInWithGoogleOption: GetSignInWithGoogleOption = GetSignInWithGoogleOption.Builder()
.setServerClientId(WEB_CLIENT_ID)
.setNonce(<nonce string to use when generating a Google ID token>)
.build()
Verarbeite die zurückgegebene GoogleIdTokenCredential
wie im folgenden Codebeispiel beschrieben.
fun handleSignIn(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")
}
}
}
Nachdem Sie die Google-Anmeldeanfrage instanziiert haben, starten Sie den Authentifizierungsvorgang auf ähnliche Weise wie im Abschnitt Über Google anmelden beschrieben.
Registrierung für neue Nutzer aktivieren (empfohlen)
Mit „Über Google anmelden“ können Nutzer ganz einfach mit nur wenigen Fingertipps ein neues Konto in Ihrer App oder Ihrem Dienst erstellen.
Wenn keine gespeicherten Anmeldedaten gefunden werden (getGoogleIdOption
gibt keine Google-Konten zurück), bitte den Nutzer, sich zu registrieren. Prüfen Sie zuerst, ob es bereits zuvor verwendete Konten gibt.setFilterByAuthorizedAccounts(true)
Wenn keine gefunden werden, bitte den Nutzer, sich mit seinem Google-Konto anzumelden. Verwende dazu setFilterByAuthorizedAccounts(false)
.
Beispiel:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID)
.build()
Nachdem du die Google-Registrierungsanfrage erstellt hast, starte den Authentifizierungsvorgang. Wenn Nutzer „Über Google anmelden“ nicht für die Registrierung verwenden möchten, können Sie Ihre App für das automatische Ausfüllen optimieren. Nachdem der Nutzer ein Konto erstellt hat, können Sie ihn als letzten Schritt zur Kontoerstellung für Passkeys registrieren.
Abmeldung verarbeiten
Wenn ein Nutzer sich von Ihrer App abmeldet, rufen Sie die API-Methode clearCredentialState()
auf, um den aktuellen Anmeldedatenstatus des Nutzers bei allen Anmeldedatenanbietern zu löschen.
Dadurch werden alle Anmeldedatenanbieter benachrichtigt, dass alle gespeicherten Anmeldedatensitzungen für die jeweilige App gelöscht werden sollen.
Ein Anmeldedatenanbieter hat möglicherweise eine aktive Anmeldedatensitzung gespeichert und verwendet diese, um die Anmeldeoptionen für zukünftige Aufrufe von „get-credential“ einzuschränken. So kann beispielsweise der aktive Anmeldedatensatz vor allen anderen verfügbaren Anmeldedatensätzen priorisiert werden. Wenn sich ein Nutzer explizit von Ihrer App abmeldet und Sie die vollständigen Anmeldeoptionen beim nächsten Mal sehen möchten, sollten Sie diese API aufrufen, damit der Anbieter alle gespeicherten Anmeldedatensitzungen löscht.