Google Log-in in Ihre Android-App integrieren

Um Google Log-in in deine Android-App einzubinden, konfiguriere Google Log-in und füge dem Layout deiner App eine Schaltfläche hinzu, mit der der Anmeldevorgang gestartet wird.

Hinweis

Ein Google API Console-Projekt konfigurieren und Ihr Android Studio-Projekt einrichten

Google Log-in und das GoogleSignInClient-Objekt konfigurieren

  1. Konfigurieren Sie in der Methode onCreate Ihrer Anmeldeaktivität Google Log-in, um die für Ihre App erforderlichen Nutzerdaten anzufordern. Wenn Sie beispielsweise mit Google Log-in die ID und grundlegende Profilinformationen von Nutzern anfordern möchten, 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 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 Bereiche anfordern, die für Ihre Anwendung erforderlich sind. Fordern Sie nur dann zusätzliche Bereiche an, wenn Sie sie benötigen, damit Ihre Nutzer den Zustimmungsbildschirm im Kontext einer ausgeführten Aktion sehen. Weitere Informationen finden Sie unter Zusätzliche Bereiche anfordern.

  2. Erstellen Sie dann auch in der Methode onCreate 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 Methode onStart Ihrer Aktivität, ob sich ein Nutzer bereits bei 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 (anstatt null) zurückgibt, hat sich der Nutzer bereits bei Google in Ihrer App angemeldet. Aktualisieren Sie die Benutzeroberfläche entsprechend. Blenden Sie beispielsweise die Anmeldeschaltfläche aus oder starten Sie die Hauptaktivität.

Wenn GoogleSignIn.getLastSignedInAccount null zurückgibt, hat sich der Nutzer noch nicht bei Google in Ihrer App angemeldet. Aktualisieren Sie Ihre UI, um die Google Log-in-Schaltfläche anzuzeigen.

Google Log-in-Schaltfläche zur App hinzufügen

  1. Die standardmäßige Google-Anmeldeschaltfläche Fügen Sie im Layout Ihrer Anwendung SignInButton hinzu:

    <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 Anmeldeschaltflächen verwenden, anstatt eigene Assets für Anmeldeschaltflächen zu 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);
    
  3. Registrieren Sie in der Android-Aktivität, z. B. in der Methode onCreate, 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 von der Kontoauswahl in Sign-In Verarbeite in der Methode onClick der Aktivität die Anmeldeschaltflächen. Erstelle dazu einen Anmelde-Intent mit der Methode getSignInIntent und starte den Intent mit startActivityForResult.

    @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 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, können Sie in der Methode onActivityResult 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);
        }
    }

    Du kannst die E-Mail-Adresse des Nutzers auch mit getEmail, die Google-ID des Nutzers (zur clientseitigen 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 es auf dem Server.