Um Google Log-in in deine Android-App zu integrieren, konfiguriere Google Log-in und füge dem Layout deiner App eine Schaltfläche hinzu, mit der der Anmeldevorgang gestartet wird.
Hinweis
Konfigurieren Sie ein Google API Console-Projekt und richten Sie Ihr Android Studio-Projekt ein.
Google Log-in und das GoogleSignInClient-Objekt konfigurieren
Konfigurieren Sie Google Log-in in der
onCreate
-Methode Ihrer Anmeldeaktivität so, dass die für Ihre App erforderlichen Nutzerdaten angefordert werden. Wenn Sie beispielsweise die Nutzer-ID und grundlegende Profilinformationen anfordern möchten, müssen Sie einGoogleSignInOptions
-Objekt mit dem ParameterDEFAULT_SIGN_IN
erstellen. Wenn Sie auch die E-Mail-Adressen von Nutzern 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 diese mit
requestScopes
an. Für eine optimale Nutzererfahrung sollten Sie bei der Anmeldung nur die Bereiche anfordern, die erforderlich sind, damit Ihre Anwendung nur minimal funktioniert. Fordern Sie zusätzliche Bereiche nur dann an, wenn Sie sie benötigen, damit Ihre Nutzer den Zustimmungsbildschirm im Zusammenhang mit einer von ihnen ausgeführten Aktion sehen. Siehe Zusätzliche Bereiche anfordern.Erstellen Sie dann 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 bereits angemeldeten Nutzer suchen
Prüfe in der onStart
-Methode deiner Aktivität, ob sich ein Nutzer bereits über Google bei deiner 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 anstatt null
zurückgibt, hat sich der Nutzer bereits mit Google in Ihrer App angemeldet.
Aktualisieren Sie Ihre UI entsprechend. Blenden Sie also die Anmeldeschaltfläche aus, starten Sie Ihre Hauptaktivität oder was für Ihre App erforderlich ist.
Wenn GoogleSignIn.getLastSignedInAccount
null
zurückgibt, hat sich der Nutzer noch nicht über Google in Ihrer Anwendung angemeldet. Aktualisiere deine Benutzeroberfläche, sodass die Google Log-in-Schaltfläche angezeigt wird.
Google Log-in-Schaltfläche zur App hinzufügen
Fügen Sie
SignInButton
in das Layout Ihrer Anwendung ein:<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, 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
der Schaltfläche, damit der Nutzer beim Anklicken angemeldet wird:findViewById(R.id.sign_in_button).setOnClickListener(this);
Anmeldevorgang starten
Um das Antippen der Anmeldeschaltfläche in der
onClick
-Methode der Aktivität zu verarbeiten, erstellen Sie einen Anmelde-Intent mit der MethodegetSignInIntent
und starten den Intent mitstartActivityForResult
.@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 Sie den Intent starten, wird der Nutzer aufgefordert, ein Google-Konto für die Anmeldung auszuwählen. Wenn Sie Bereiche außerhalb von
profile
,email
undopenid
angefordert haben, wird der Nutzer außerdem 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 ihn 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 über den angemeldeten Nutzer, z. B. seinen Namen.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 die E-Mail-Adresse des Nutzers auch mit
getEmail
, die Google-ID des Nutzers (für die clientseitige Verwendung) mitgetId
und ein ID-Token für den Nutzer mitgetIdToken
abrufen. Wenn der aktuell angemeldete Nutzer an einen Back-End-Server übergeben werden soll, senden Sie das ID-Token an Ihren Back-End-Server und validieren Sie das Token auf dem Server.