Wenn Sie Google Log-in in Ihre Android-App einbinden möchten, müssen Sie Google Log-in konfigurieren und dem Layout Ihrer App eine Schaltfläche hinzufügen, mit der der Anmeldevorgang gestartet wird.
Hinweis
Konfigurieren Sie ein Google API Console-Projekt und richten Sie Ihr Android Studio-Projekt ein.
Google-Anmeldung und das GoogleSignInClient-Objekt konfigurieren
Konfigurieren Sie in der
onCreate
-Methode Ihrer Anmeldeaktivität die Google-Anmeldung so, dass die für Ihre App erforderlichen Nutzerdaten angefordert werden. Wenn Sie beispielsweise die Google-Anmeldung so konfigurieren möchten, dass die ID und die grundlegenden Profilinformationen der Nutzer angefordert werden, erstellen Sie einGoogleSignInOptions
-Objekt mit dem ParameterDEFAULT_SIGN_IN
. Wenn Sie auch die E-Mail-Adressen der Nutzer anfordern möchten, erstellen Sie dasGoogleSignInOptions
-Objekt mit der OptionrequestEmail
.// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
Wenn Sie zusätzliche Bereiche für den Zugriff auf Google APIs anfordern müssen, geben Sie sie mit
requestScopes
an. Für eine optimale Nutzererfahrung sollten Sie bei der Anmeldung nur die Berechtigungen anfordern, die für die grundlegende Funktion Ihrer App erforderlich sind. Fordern Sie zusätzliche Bereiche nur dann an, wenn Sie sie benötigen, damit Ihre Nutzer den Zustimmungsbildschirm im Kontext einer von ihnen ausgeführten Aktion sehen. Weitere Informationen finden Sie unter Zusätzliche Bereiche anfordern.Erstellen Sie dann ebenfalls in der
onCreate
-Methode Ihrer Anmeldeaktivität einGoogleSignInClient
-Objekt mit den von Ihnen angegebenen Optionen.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Nach einem vorhandenen angemeldeten Nutzer suchen
Prüfen Sie in der Methode onStart
Ihrer Aktivität, ob sich ein Nutzer bereits mit Google in Ihrer App angemeldet hat.
// Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); updateUI(account);
Wenn GoogleSignIn.getLastSignedInAccount
ein GoogleSignInAccount
-Objekt (und nicht null
) zurückgibt, hat sich der Nutzer bereits mit Google in Ihrer App angemeldet.
Aktualisieren Sie die Benutzeroberfläche entsprechend, d. h. blenden Sie die Anmeldeschaltfläche aus, starten Sie die Hauptaktivität oder was auch immer für Ihre App angemessen ist.
Wenn GoogleSignIn.getLastSignedInAccount
null
zurückgibt, hat sich der Nutzer noch nicht mit Google in Ihrer App angemeldet. Aktualisieren Sie die Benutzeroberfläche, damit die Schaltfläche „Mit Google anmelden“ angezeigt wird.
Google Log-in-Schaltfläche in die App einfügen
Fügen Sie das
SignInButton
dem Layout Ihrer Anwendung hinzu:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Optional: Wenn Sie die Standardgrafik für die Anmeldeschaltfläche verwenden, anstatt eigene Assets für die Anmeldeschaltfläche bereitzustellen, können Sie die Größe der Schaltfläche mit der Methode
setSize
anpassen.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Registrieren Sie in der Android-Aktivität (z. B. in der Methode
onCreate
) dieOnClickListener
Ihrer Schaltfläche, um den Nutzer bei einem Klick anzumelden:findViewById(R.id.sign_in_button).setOnClickListener(this);
Anmeldevorgang starten
Behandeln Sie in der
onClick
-Methode der Aktivität das Tippen auf die Anmeldeschaltfläche, indem Sie mit der MethodegetSignInIntent
eine Anmeldeabsicht erstellen und die Absicht mitstartActivityForResult
starten.@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
Wenn der Intent gestartet wird, wird der Nutzer aufgefordert, ein Google-Konto auszuwählen, mit dem er sich anmelden möchte. Wenn Sie Bereiche über
profile
,email
undopenid
hinaus angefordert haben, wird der Nutzer auch aufgefordert, Zugriff auf die angeforderten Ressourcen zu gewähren.Nachdem sich der Nutzer angemeldet hat, können Sie in der
onActivityResult
-Methode der Aktivität einGoogleSignInAccount
-Objekt für den Nutzer abrufen.@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }
Das
GoogleSignInAccount
-Objekt enthält Informationen zum angemeldeten Nutzer, z. B. den Namen des Nutzers.private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }
Sie können auch die E-Mail-Adresse des Nutzers mit
getEmail
, die Google-ID des Nutzers (für die clientseitige Verwendung) mitgetId
und ein ID-Token für den Nutzer mitgetIdToken
abrufen. Wenn Sie den aktuell angemeldeten Nutzer an einen Backend-Server übergeben müssen, senden Sie das ID-Token an Ihren Backend-Server und validieren Sie das Token auf dem Server.