Google Log-in in deine Android-App einbinden

Wenn Sie Google Log-in in Ihre Android-App einbinden möchten, konfigurieren Sie Google Log-in und fügen Sie dem Layout Ihrer App eine Schaltfläche hinzu, über die der Anmeldevorgang gestartet wird.

Hinweis

Konfigurieren Sie ein Google API Console-Projekt und richten Sie Ihr Android Studio-Projekt ein.

Google Sign-in und das GoogleSignInClient-Objekt konfigurieren

  1. Konfigurieren Sie in der onCreate-Methode Ihrer Anmeldeaktivität Google Sign-In so, dass die von Ihrer App benötigten Nutzerdaten angefordert werden. Wenn Sie Google Sign-In beispielsweise so konfigurieren möchten, dass die ID und grundlegende Profilinformationen der Nutzer angefordert werden, erstellen Sie ein GoogleSignInOptions-Objekt mit dem Parameter DEFAULT_SIGN_IN. Wenn Sie auch die E-Mail-Adressen der Nutzer anfordern möchten, erstellen Sie das GoogleSignInOptions-Objekt mit der Option requestEmail.

    // 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 Zugriffsbereiche 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 minimale Funktion Ihrer App erforderlich sind. Fordern Sie zusätzliche Bereiche nur an, wenn Sie sie benötigen, damit Nutzer den Einwilligungsbildschirm im Kontext einer von ihnen ausgeführten Aktion sehen. Weitere Informationen finden Sie unter Zusätzliche Bereiche anfordern.

  2. Erstellen Sie dann auch in der onCreate-Methode Ihrer Anmeldeaktivität ein GoogleSignInClient-Objekt mit den von Ihnen angegebenen Optionen.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Nach einem angemeldeten Nutzer suchen

Prüfen Sie in der onStart-Methode 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 zurückgibt (und nicht null), hat sich der Nutzer bereits mit Google in Ihrer App angemeldet. Aktualisieren Sie die Benutzeroberfläche entsprechend. Das heißt, blenden Sie die Anmeldeschaltfläche aus, starten Sie die Hauptaktivität oder führen Sie eine andere Aktion aus, die für Ihre App geeignet ist.

Wenn GoogleSignIn.getLastSignedInAccount null zurückgibt, hat sich der Nutzer noch nicht mit Google in Ihrer App angemeldet. Aktualisieren Sie Ihre Benutzeroberfläche, damit die Schaltfläche „Über Google anmelden“ angezeigt wird.

Schaltfläche für die Google-Anmeldung in Ihrer App hinzufügen

  1. Die standardmäßige Google-Anmeldeschaltfläche Fügen Sie den 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" />
    
  2. 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);
    
  3. Registrieren Sie in der Android-Aktivität (z. B. in der onCreate-Methode) die OnClickListener Ihrer Schaltfläche, um den Nutzer anzumelden, wenn er darauf klickt:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Anmeldevorgang starten

  1. Bild der Kontoauswahl für die Anmeldung In der onClick-Methode der Aktivität können Sie das Tippen auf die Anmeldeschaltfläche verarbeiten, indem Sie mit der Methode getSignInIntent eine Anmeldeabsicht erstellen und die Absicht mit startActivityForResult 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 und openid hinaus angefordert haben, wird der Nutzer auch aufgefordert, Zugriff auf die angeforderten Ressourcen zu gewähren.

  2. Nachdem sich der Nutzer angemeldet hat, kannst du über die onActivityResult-Methode der Aktivität ein GoogleSignInAccount-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. 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);
        }
    }

    Außerdem kannst du die E-Mail-Adresse des Nutzers mit getEmail, die Google-ID des Nutzers (für die clientseitige Verwendung) mit getId und ein ID-Token für den Nutzer mit getIdToken abrufen. Wenn Sie den aktuell angemeldeten Nutzer an einen Backend-Server weitergeben müssen, senden Sie das ID-Token an Ihren Backend-Server und validieren Sie das Token auf dem Server.