Tek dokunuşla yeni hesaplar oluşturun

Google Hesaplarıyla oturum açmayı destekliyorsanız One Tap ile oturum açma istemcisini kullanarak kullanıcılarınıza, uygulamanızın bağlamından asla çıkmayacak sorunsuz bir hesap oluşturma deneyimi de sunabilirsiniz.

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

One Tap kullanıcı arayüzünü görüntülediğinizde kullanıcılardan, cihazlarındaki Google Hesaplarından birini kullanarak uygulamanızla yeni bir hesap oluşturmaları istenir. Kullanıcı devam etmeyi seçerse temel profil bilgilerini (kullanıcının adı, profil fotoğrafı ve doğrulanmış e-posta adresi) içeren bir kimlik jetonu alırsınız. Bu jetonu yeni hesabı oluşturmak için kullanabilirsiniz.

One Tap hesap oluşturma süreci iki bölümden oluşur:

  • One Tap istemcisini uygulamanıza entegre etme (bu sayfada açıklanmaktadır). Bu, One Tap ile oturum açmanın kullanımıyla çoğunlukla aynıdır ancak yapılandırmada bazı farklılıklar vardır.
  • Arka ucunuza, Google kimlik jetonlarından kullanıcı hesapları oluşturma olanağı ekleyin. Bu işlem, Arka uçta kimlik jetonlarını kullanma bölümünde ele alınmaktadır.

One Tap ile kaydolmayı nerede kullanmalıyım?

Kullanıcılara One Tap ile kaydolma seçeneği sunmak için en etkili yer, oturum açmanın yeni özellikleri etkinleştireceği bir bağlamdır. Öncelikle, kullanıcının kayıtlı kimlik bilgileriyle oturum açmasını deneyin. Kayıtlı kimlik bilgileri bulunamazsa kullanıcı için yeni bir hesap oluşturmayı teklif edin.

Başlamadan önce

Google API'leri konsol projenizi ve Android projenizi One Tap ile oturum açmaya başlama bölümünde açıklandığı şekilde oluşturun.

1. One Tap istemcisini yapılandırma

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

  • Şifre kimlik bilgisi isteklerini etkinleştirme. (Tek dokunuşla kaydolma yalnızca jeton tabanlı kimlik doğrulamayla mümkündür.)
  • setGoogleIdTokenRequestOptions() özelliğini ve şu ayarları kullanarak Google kimliği jetonu isteklerini etkinleştirin:

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 ile kaydolmayı kullanmayı reddedip reddetmediğini görmek için istemi kapatın veya formun dışına dokunun. Bu, Etkinliğinizin bir boole özelliği kadar basit olabilir. (Aşağıdaki One Tap kullanıcı arayüzünü görüntülemeyi durdurma konusuna bakın.)

3. One Tap 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 çağırın ve döndürdüğü Task öğesine işleyiciler ekleyin. Uygulamalar genellikle bu adımı, bir One Tap oturum açma isteği kayıtlı herhangi bir kimlik bilgisi bulamadığında (oturum açma isteğinin hata işleyicisinde) uygular.

Kullanıcının cihazında bir veya daha fazla Google Hesabı ayarlanmışsa One Tap istemcisi, başarı dinleyicisini arar. Başarı dinleyicisinde, Task sonucundan gelen bekleme niyetini alın ve One Tap kullanıcı arayüzünü başlatmak için bunu startIntentSenderForResult() işlevine iletin.

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 oturum kapalıyken deneyimini sunmaya devam edebilirsiniz ve kullanıcı normal hesap oluşturma akışınıza kaydolabilir.

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 ile kaydolma istemine verdiği yanıt, Etkinliğinizin onActivityResult() yöntemi kullanılarak uygulamanıza bildirilir. Kullanıcı bir hesap oluşturmayı seçtiyse sonuç bir Google kimliği jetonu olur. Kullanıcı, One Tap kullanıcı arayüzünü kapatarak veya kullanıcı arayüzünün dışına dokunarak kaydolmayı reddederse sonuç şu kodu döndürür: RESULT_CANCELED. Uygulamanız her iki olasılığı da ele almalıdır.

Google kimlik jetonuyla hesap oluşturma

Kullanıcı bir Google Hesabı ile kaydolmayı tercih ettiyse amaç verilerini onActivityResult() ürününden One Tap istemcisinin getSignInCredentialFromIntent() yöntemine ileterek kullanıcı için bir kimlik jetonu alabilirsiniz. Kimlik bilgisinin boş olmayan bir googleIdToken özelliği olur.

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

Kimlik bilgisi aynı zamanda varsa hesabın doğrulanmış telefon numarası gibi istediğiniz ek ayrıntıları da içerir.

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ı reddederse getSignInCredentialFromIntent() numaralı telefona yapılan çağrıda, CommonStatusCodes.CANCELED durum kodunu içeren bir ApiException döndürülür. Bu durumda, yinelenen istemlerle kullanıcılarınızı rahatsız etmemek için One Tap oturum açma kullanıcı arayüzünü geçici olarak durdurmanız gerekir. Aşağıdaki örnekte bunu yapmak için Etkinlik'te bir özellik ayarlanır. Bu özellik, kullanıcıya One Tap ile oturum açma olanağı sunup sunmayacağını belirler. Ancak dilerseniz SharedPreferences hizmetine bir değer kaydedebilir veya başka bir yöntem kullanabilirsiniz.

One Tap oturum açma istemleri için kendi hız sınırlandırmanızı uygulamanız önemlidir. Aksi takdirde, bir kullanıcı arka arkaya birkaç istemi iptal ederse One Tap istemcisi sonraki 24 saat boyunca kullanıcıya sormaz.

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, kullanıcının e-posta adresi, tam adı ve profil resmi URL'si gibi bazı temel profil bilgilerini içeren bir Google kimliği jetonu alırsınız. Çoğu uygulamada bu bilgiler, arka uçta kullanıcının kimliğini doğrulamanız ve yeni bir hesap oluşturmanız için yeterlidir.

Hesap oluşturma işlemini tamamlamak için ek bilgiye ihtiyaç duyuyorsanız (örneğin, kullanıcının doğum tarihi) kullanıcıya kayıt ayrıntıları akışı sunulur. Bu ek bilgileri burada istersiniz. Daha sonra, hesap oluşturma işlemini tamamlamak için bu bilgileri arka ucunuza gönderin.