Google Log-in in deine Android-App einbinden

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, die den Anmeldevorgang startet.

Hinweis

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

Google Log-in und das Objekt „GoogleSignInClient“ konfigurieren

  1. Konfigurieren Sie in der onCreate-Methode Ihrer Anmeldeaktivität Google Log-in so, dass die von Ihrer Anwendung erforderlichen Nutzerdaten angefordert werden. Wenn Sie beispielsweise Google Log-in so konfigurieren möchten, dass die Nutzer-ID und grundlegende Profilinformationen angefragt 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 Objekt GoogleSignInOptions 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 für den Zugriff auf Google APIs zusätzliche Bereiche 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 Kontext einer von ihnen ausgeführten Aktion sehen. Siehe 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 vorhandenen 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 (und nicht null) zurückgibt, hat sich der Nutzer bereits mit Google in Ihrer App angemeldet. Aktualisieren Sie Ihre UI entsprechend. Blenden Sie dazu die Anmeldeschaltfläche aus, starten Sie die Hauptaktivität oder etwas anderes, das für Ihre App geeignet ist.

Wenn GoogleSignIn.getLastSignedInAccount null zurückgibt, hat sich der Nutzer noch nicht mit Google bei Ihrer App angemeldet. Aktualisiere deine UI, damit die Google Log-in-Schaltfläche angezeigt wird.

Google Log-in-Schaltfläche zu Ihrer App hinzufügen

  1. Die standardmäßige Google-Anmeldeschaltfläche 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" />
    
  2. Optional: Wenn du die Standardgrafik für die Anmeldeschaltfläche verwendest, anstatt eigene Assets für die Anmeldeschaltfläche zur Verfügung zu stellen, kannst du 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. Registriere in der Android-Aktivität (z. B. in der Methode onCreate) die OnClickListener deiner Schaltfläche, um den Nutzer anzumelden, wenn er darauf klickt:

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

Anmeldung starten

  1. Bild der Kontoauswahl für Anmeldungen Erstellen Sie in der onClick-Methode der Aktivität einen Anmelde-Intent mit der Methode getSignInIntent und starten Sie den Intent mit startActivityForResult, um das Tippen auf die Anmeldeschaltfläche zu verarbeiten.

    @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 angefordert haben, die über profile, email und openid hinausgehen, wird der Nutzer auch aufgefordert, Zugriff auf die angeforderten Ressourcen zu gewähren.

  2. Nachdem sich der Nutzer angemeldet hat, kannst du in der 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 Objekt GoogleSignInAccount 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);
        }
    }

    Sie können die E-Mail-Adresse des Nutzers auch 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 Back-End-Server übergeben müssen, senden Sie das ID-Token an Ihren Back-End-Server und validieren Sie das Token auf dem Server.