Neue Konten mit nur einem Tippen erstellen

Wenn Sie die Anmeldung mit Google-Konten unterstützen, können Sie die Anmeldung über One Tap verwenden um Ihren Nutzern eine reibungslose Kontoerstellung zu bieten, werden sie nie aus dem Kontext Ihrer App genommen.

Benutzeroberfläche für die Registrierung mit nur einem Tippen

Wenn die One Tap-Benutzeroberfläche angezeigt wird, werden die Nutzer aufgefordert, ein neues Konto mit Ihre App über eines der Google-Konten auf ihrem Gerät nutzen. Wenn der Nutzer erhalten Sie ein ID-Token mit grundlegenden Profilinformationen, Ihr Profilbild und die bestätigte E-Mail-Adresse, mit der Sie um das neue Konto zu erstellen.

Die Implementierung der One Tap-Kontoerstellung besteht aus zwei Teilen:

  • Integrieren des One Tap-Clients in Ihre App, wie auf dieser Seite beschrieben. Dies entspricht größtenteils der Anmeldung über One Tap, Konfiguration.
  • Die Möglichkeit, Nutzerkonten über die Google-ID zu erstellen, wird zu Ihrem Backend hinzugefügt. Tokens, die unter ID-Tokens auf dem Back-End verwenden erläutert werden.

Wo sollte ich die One Tap-Registrierung nutzen?

Die One Tap-Registrierung ist am wirkungsvollsten, wenn werden durch eine Anmeldung neue Funktionen aktiviert. Versuchen Sie zuerst, den Nutzer mit einem Anmeldedaten gespeichert werden. Wenn keine gespeicherten Anmeldedaten gefunden werden, bieten Sie an, neue zu erstellen. für den Nutzer.

Hinweis

Richten Sie Ihr Projekt in der Google APIs-Konsole und Ihr Android-Projekt wie beschrieben ein. Weitere Informationen finden Sie unter Erste Schritte mit der One Tap-Anmeldung.

1. One Tap-Client konfigurieren

So konfigurieren Sie den One Tap-Client für die Kontoerstellung:

  • Aktivieren Sie keine Anfragen für Passwortanmeldedaten. (Die Registrierung ist nur mit nur einmal tippen möglich. mit tokenbasierter Authentifizierung.)
  • Aktivieren Sie Google-ID-Tokenanfragen mit setGoogleIdTokenRequestOptions() und diese Einstellungen:

Java

public class YourActivity extends AppCompatActivity {

  // ...

  private SignInClient oneTapClient;
  private BeginSignInRequest signUpRequest;

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState,
                       @Nullable PersistableBundle persistentState) {
      super.onCreate(savedInstanceState, persistentState);

      oneTapClient = Identity.getSignInClient(this);
      signUpRequest = BeginSignInRequest.builder()
              .setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder()
                      .setSupported(true)
                      // Your server's client ID, not your Android client ID.
                      .setServerClientId(getString(R.string.your_web_client_id))
                      // Show all accounts on the device.
                      .setFilterByAuthorizedAccounts(false)
                      .build())
              .build();

      // ...
  }
}

Kotlin

class YourActivity : AppCompatActivity() {
    // ...

    private lateinit var oneTapClient: SignInClient
    private lateinit var signUpRequest: BeginSignInRequest

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        oneTapClient = Identity.getSignInClient(this)
        signUpRequest = BeginSignInRequest.builder()
            .setGoogleIdTokenRequestOptions(
                BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
                    .setSupported(true)
                    // Your server's client ID, not your Android client ID.
                    .setServerClientId(getString(R.string.your_web_client_id))
                    // Show all accounts on the device.
                    .setFilterByAuthorizedAccounts(false)
                    .build())
            .build()
        // ...
    }
    // ...
}

2. Informationen zur Kündigung der One Tap-Benutzeroberfläche

Prüfen Sie, ob der Nutzer One Tap bereits abgelehnt hat. schließen Sie die Aufforderung oder tippen Sie außerhalb der Aufforderung, um sich zu registrieren. Dies kann als eine boolesche Eigenschaft deiner Aktivität. Weitere Informationen finden Sie unter One Tap nicht mehr anzeigen UI (siehe unten).

3. Benutzeroberfläche für die Anmeldung über One Tap aufrufen

Wenn der Nutzer die Erstellung eines neuen Kontos über One Tap nicht abgelehnt hat, rufen Sie den beginSignIn()-Methode des Clientobjekts hinzufügen und dem Task-Element Listener hinzufügen Rücksendungen. Bei Apps wird dieser Schritt normalerweise ausgeführt, wenn bei einer One Tap-Anmeldeanfrage keine alle gespeicherten Anmeldedaten, d. h. im Fehler-Listener des Anmeldevorgangs

Der One Tap-Client ruft den Erfolgs-Listener auf, wenn der Nutzer mindestens einen Google-Konten, die auf dem Gerät eingerichtet sind. Rufen Sie im Erfolgs-Listener den Status "Pending" Intent aus dem Task-Ergebnis aus und übergeben ihn an startIntentSenderForResult() um die One Tap-Benutzeroberfläche zu starten.

Wenn der Nutzer keine Google-Konten auf dem Gerät hat, ruft den Fehler-Listener auf. In diesem Fall müssen Sie nichts weiter tun. Sie können einfach weiterhin die App ohne Anmeldung präsentieren. mit dem normalen Kontoerstellungsprozess anmelden.

Java

oneTapClient.beginSignIn(signUpRequest)
        .addOnSuccessListener(this, new OnSuccessListener<BeginSignInResult>() {
            @Override
            public void onSuccess(BeginSignInResult result) {
                try {
                    startIntentSenderForResult(
                            result.getPendingIntent().getIntentSender(), REQ_ONE_TAP,
                            null, 0, 0, 0);
                } catch (IntentSender.SendIntentException e) {
                    Log.e(TAG, "Couldn't start One Tap UI: " + e.getLocalizedMessage());
                }
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // No Google Accounts found. Just continue presenting the signed-out UI.
                Log.d(TAG, e.getLocalizedMessage());
            }
        });

Kotlin

oneTapClient.beginSignIn(signUpRequest)
    .addOnSuccessListener(this) { result ->
        try {
            startIntentSenderForResult(
                result.pendingIntent.intentSender, REQ_ONE_TAP,
                null, 0, 0, 0)
        } catch (e: IntentSender.SendIntentException) {
            Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
        }
    }
    .addOnFailureListener(this) { e ->
        // No Google Accounts found. Just continue presenting the signed-out UI.
        Log.d(TAG, e.localizedMessage)
    }

4. Die Antwort des Nutzers verarbeiten

Die Antwort des Nutzers auf die Aufforderung zur Registrierung über One Tap wird an Ihre App gemeldet mithilfe der onActivityResult()-Methode deiner Aktivität. Wenn der Nutzer ein Konto ist das Ergebnis ein Google-ID-Token. Wenn der Nutzer die Registrierung abgelehnt hat, entweder durch Schließen der One Tap-Benutzeroberfläche oder durch Tippen außerhalb der Benutzeroberfläche, wird das Ergebnis mit dem Code RESULT_CANCELED. Ihre App muss beide Möglichkeiten unterstützen.

Konto mit einem Google-ID-Token erstellen

Wenn sich der Nutzer mit einem Google-Konto registriert hat, können Sie ein ID-Token für durch Übergabe der Intent-Daten von onActivityResult() an One Tap getSignInCredentialFromIntent()-Methode des Clients. Die Anmeldedaten haben Folgendes: googleIdToken-Property ungleich null.

Verwenden Sie das ID-Token, um ein Konto in Ihrem Backend zu erstellen (siehe Authentifizierung mit einem Back-End mit ID-Tokens) und melden Sie den Nutzer an.

Der Berechtigungsnachweis enthält auch alle von Ihnen angeforderten zusätzlichen Informationen, z. B.: die bestätigte Telefonnummer des Kontos, falls verfügbar.

Java

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
                  String idToken = credential.getGoogleIdToken();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  }
              } catch (ApiException e) {
                  // ...
              }
              break;
      }
  }
}

Kotlin

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
             REQ_ONE_TAP -> {
                try {
                    val credential = oneTapClient.getSignInCredentialFromIntent(data)
                    val idToken = credential.googleIdToken
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token!")
                        }
                    }
                } catch (e: ApiException) {
                    // ...
            }
        }
    }
    // ...
}

One Tap-Benutzeroberfläche nicht mehr anzeigen

Wenn der Nutzer die Anmeldung abgelehnt hat, wird getSignInCredentialFromIntent() angerufen gibt ApiException mit dem Statuscode CommonStatusCodes.CANCELED aus. In diesem Fall sollten Sie die One Tap-Anmeldebenutzeroberfläche vorübergehend nicht mehr anzeigen. damit die Nutzer nicht durch wiederholte Aufforderungen verärgert werden. Im folgenden Beispiel legt eine Eigenschaft für die Aktivität fest, mit der sie Feststellen, ob dem Nutzer eine One Tap-Anmeldung angeboten wird Sie könnten aber auch einen Wert unter SharedPreferences speichern oder eine andere Methode verwenden.

Es ist wichtig, dass Sie Ihre eigene Ratenbegrenzung für Aufforderungen zur Anmeldung über One Tap implementieren. Wenn das nicht der Fall ist und ein Nutzer mehrere Aufforderungen hintereinander abbricht, wird der One Tap-Client den Nutzer in den nächsten 24 Stunden nicht mehr auffordert.

Java

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  // ...
              } catch (ApiException e) {
                  switch (e.getStatusCode()) {
                      case CommonStatusCodes.CANCELED:
                          Log.d(TAG, "One-tap dialog was closed.");
                          // Don't re-prompt the user.
                          showOneTapUI = false;
                          break;
                      case CommonStatusCodes.NETWORK_ERROR:
                          Log.d(TAG, "One-tap encountered a network error.");
                          // Try again or just ignore.
                          break;
                      default:
                          Log.d(TAG, "Couldn't get credential from result."
                                  + e.getLocalizedMessage());
                          break;
                  }
              }
              break;
      }
  }
}

Kotlin

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            REQ_ONE_TAP -> {
                try {
                    // ...
                } catch (e: ApiException) {
                    when (e.statusCode) {
                        CommonStatusCodes.CANCELED -> {
                            Log.d(TAG, "One-tap dialog was closed.")
                            // Don't re-prompt the user.
                            showOneTapUI = false
                        }
                        CommonStatusCodes.NETWORK_ERROR -> {
                            Log.d(TAG, "One-tap encountered a network error.")
                            // Try again or just ignore.
                        }
                        else -> {
                            Log.d(TAG, "Couldn't get credential from result." +
                                " (${e.localizedMessage})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

Nächste Schritte

Wenn ein Nutzer die One Tap-Registrierung abgeschlossen hat, erhalten Sie ein Google-ID-Token, das einige grundlegende Profilinformationen enthält: die E-Mail-Adresse, den vollständigen Namen, und die URL des Profilbilds. Bei vielen Apps reichen diese Informationen aus, Nutzer am Backend authentifizieren und ein neues Konto erstellen

Wenn Sie zusätzliche Informationen benötigen, um die Kontoerstellung abzuschließen, z. B. das Geburtsdatum des Nutzers. Dem Nutzer wird ein Vorgang mit Anmeldedetails präsentiert, in dem wenn Sie diese zusätzlichen Informationen anfordern. Senden Sie es dann an Ihr Backend, um die Kontoerstellung abzuschließen.