Tek dokunuşla yeni hesaplar oluşturun

Google Hesaplarıyla oturum açmayı destekliyorsanız One Tap ile oturum açma özelliğini kullanabilirsiniz aynı zamanda kullanıcılarınıza sorunsuz bir hesap oluşturma hiçbir zaman uygulamanızın bağlamı dışına çıkmaz.

Tek dokunuşla kaydolma kullanıcı arayüzü

One Tap kullanıcı arayüzünü görüntülediğinizde kullanıcılardan Google Hesaplarından birini kullanarak uygulamanızı ekleyebilirsiniz. Kullanıcı devam etmek için temel profil bilgilerini içeren bir kimlik jetonu alırsınız. Bu bilgilerin adı, profil fotoğrafı ve doğrulanmış e-posta adresi (bunları şunlar için kullanabilirsiniz: yeni hesabı oluşturun.

One Tap hesabı oluşturma işleminin iki bölümü vardır:

  • One Tap istemcisini uygulamanıza entegre etme (bu sayfada açıklanmıştır). Bu işlem, One Tap ile oturum açmanın kullanımıyla aynıdır, ancak yapılandırma.
  • Arka ucunuza Google Kimliğinden kullanıcı hesapları oluşturma özelliği eklendi jetonları için Arka uçta kimlik jetonlarını kullanma bölümüne bakın.

One Tap'e kaydolmayı nerede kullanmalıyım?

Kullanıcılara One Tap ile kaydolmanın en etkili yolu, yeni özellikleri etkinleştirir. Öncelikle, kullanıcının ilk olarak kayıtlı kimlik bilgisi. Kayıtlı bir kimlik bilgisi bulunamazsa yeni bir kimlik bilgisi oluşturmayı teklif edin kullanıcı hesabıdır.

Başlamadan önce

Google API'leri konsol projenizi ve Android projenizi açıklandığı şekilde ayarlayın One Tap ile oturum açmayı kullanmaya başlama başlıklı makaleyi inceleyin.

1. One Tap istemcisini yapılandırma

One Tap istemcisini hesap oluşturma için yapılandırmak üzere aşağıdakileri yapın:

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. One Tap kullanıcı arayüzü iptalini takip edin

Kullanıcının One Tap'i kullanmayı reddedip reddetmediğini takip etmeniz gerekir İstemi kapatarak veya dışarı dokunarak kaydolabilirsiniz. Bu, basit bir boole özelliği olacaktır. (Daha fazla bilgi için One Tap'ı göstermeyi durdurma kullanıcı arayüzü bölümüne bakın.)

3. One Tap ile kaydolma kullanıcı arayüzünü görüntüleme

Kullanıcı yeni bir hesap oluşturmak için One Tap'i kullanmayı reddetmediyse istemci nesnesinin beginSignIn() yöntemini kullanarak ve Task öğesine işleyiciler ekleyin belirtir. Uygulamalar genellikle bu adımı, One Tap ile oturum açma isteği kayıtlı kimlik bilgileri (yani, oturum açma oturum açma işleyicisinde) isteğinde bulunabilirsiniz.

Kullanıcının bir veya daha fazla özelliği varsa One Tap istemcisi başarılı dinleyiciyi arar Cihazda kurulu Google Hesapları. Başarı dinleyicisinde beklemedeki Intent'i Task sonucundan alıp startIntentSenderForResult() One Tap kullanıcı arayüzünü başlatın.

Kullanıcının cihazda herhangi bir Google Hesabı yoksa One Tap istemcisi hata işleyiciyi çağırır. Bu durumda herhangi bir işlem yapmanız gerekmez. uygulamanın oturumunu kapatmış halini sunmaya devam ederseniz, kullanıcı söz konusu normal hesap oluşturma akışınızla kaydolmalısınız.

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. Kullanıcının yanıtını işleme

Kullanıcının One Tap'e kaydolma istemine verdiği yanıt uygulamanıza bildirilir Etkinliğinizin onActivityResult() yöntemini kullanarak. Kullanıcı bir hesabınızda oturum açmazsanız sonuç bir Google kimliği jetonu olur. Kullanıcı kaydolmayı reddetmişse One Tap kullanıcı arayüzünü kapatarak veya dışına dokunarak kodla RESULT_CANCELED yazın. Uygulamanızın her iki olasılığı da karşılaması gerekir.

Google kimliği jetonuyla hesap oluşturma

Kullanıcı bir Google Hesabı ile kaydolmayı seçerse onActivityResult() içindeki amaç verilerini One Tap'e ileterek kullanıcıyı getSignInCredentialFromIntent() yöntemi. Kimlik bilgisinde bir boş olmayan googleIdToken özelliği.

Arka ucunuzda bir hesap oluşturmak için kimlik jetonunu kullanın ( kimlik jetonları kullanan arka uç) ve kullanıcının oturum açmasını sağlayın.

Kimlik bilgisi istediğiniz ek ayrıntıları da içerir. Örneğin: varsa hesabın doğrulanmış telefon numarası.

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 kullanıcı arayüzünü göstermeyi durdurma

Kullanıcı oturum açmayı reddetmişse getSignInCredentialFromIntent() çağrısı CommonStatusCodes.CANCELED durum koduna sahip bir ApiException atar. Bu durumda, One Tap ile oturum açma kullanıcı arayüzünü göstermeyi geçici olarak durdurmanız gerekir. kullanıcılarınızı rahatsız etmemeniz için. Aşağıdaki örnek bunu, Etkinlik üzerinde bir özellik ayarlayarak kullanıcıya One Tap ile oturum açma olanağı sunup sunmayacağını belirleme; ancak dilerseniz SharedPreferences hedefine bir değer kaydedin veya başka bir yöntem kullanın.

One Tap ile oturum açma istemlerinde kendi hız sınırlamanızı uygulamanız önemlidir. Bunu yapmazsanız ve kullanıcı art arda birkaç istemi iptal ederse One Tap istemcisi , kullanıcıyı 24 saat boyunca istemez.

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})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

Sonraki adımlar

Kullanıcı One Tap kayıt akışını tamamladığında, size bir Google kimliği jetonu verilir. Bu jeton bazı temel profil bilgilerini içerir: kullanıcının e-posta adresi, tam adı, ve profil resmi URL'si. Bu bilgi birçok uygulama için şunları yapmanız için yeterli: arka uçta kullanıcının kimliğini doğrulayın ve yeni bir hesap oluşturun.

Hesap oluşturma işlemini tamamlamak için ek bilgiye ihtiyacınız varsa (örneğin, kullanıcının doğum tarihi (kullanıcıya kayıt ayrıntıları akışı) bu ek bilgiyi istiyorsunuz. Ardından, hesap oluşturma işlemini tamamlamak için anahtarı arka ucunuza gönderin.