Google Log-in in deine Android-App einbinden

Um Google Log-in in Ihre Android-App zu integrieren, konfigurieren Sie Google Log-in und Fügen Sie dem Layout Ihrer 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 Objekt „GoogleSignInClient“ konfigurieren

  1. Konfigurieren Sie in der onCreate-Methode Ihrer Anmeldeaktivität Google Log-in für die für Ihre App erforderlichen Nutzerdaten anfordern. Um beispielsweise Google Log-in, um die ID und grundlegende Profildaten enthält, erstellen Sie GoogleSignInOptions 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();

    Geben Sie bei Bedarf zusätzliche Bereiche für den Zugriff auf Google APIs an. mit requestScopes. Für eine optimale Nutzererfahrung sollten Sie bei der Anmeldung nur die Bereiche anfordern, erforderlich, damit Ihre App nur minimal funktioniert. 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. 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 zurückgibt (und nicht null), hat sich der Nutzer bereits mit Google in Ihrer App angemeldet. Aktualisieren Sie Ihre Benutzeroberfläche entsprechend, d. h. blenden Sie die Anmeldeschaltfläche aus, starten Sie oder was für Ihre App geeignet ist.

Wenn GoogleSignIn.getLastSignedInAccount null zurückgibt, hat der Nutzer dies noch nicht getan mit Google in Ihrer App angemeldet sind. Benutzeroberfläche aktualisieren, um Google Log-in anzuzeigen Schaltfläche.

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

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

    <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 anstelle der eigene Assets für die Anmeldeschaltfläche zur Verfügung stellen, können Sie die mit dem setSize .

    // 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) 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 Anmeldungen In der onClick-Methode der Aktivität erstellen Sie ein Anmeldeabsicht mit dem getSignInIntent und starten Sie 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 auszuwählen, mit dem er sich anmelden möchte. Wenn Sie Bereiche angefordert haben, die über profile, email und openid hinausgehen, gilt Folgendes: wird der Nutzer außerdem aufgefordert, Zugriff auf die angeforderten Ressourcen zu gewähren.

  2. Nachdem sich der Nutzer angemeldet hat, können Sie ein GoogleSignInAccount erhalten. -Objekt für den Nutzer in der onActivityResult-Methode der Aktivität.

    @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. 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 die E-Mail-Adresse des Nutzers auch mit getEmail abrufen, Die Google-ID des Nutzers (für die clientseitige Verwendung) mit getId, und ein ID-Token für den Nutzer mit getIdToken. Wenn Sie den aktuell angemeldeten Nutzer an einen Backend-Server übergeben müssen, ID-Token an deinen Backend-Server senden und validieren Sie das Token auf dem Server.