Peringatan: Data ini disediakan menurut Kebijakan Data Pengguna Google . Harap tinjau dan patuhi kebijakan. Kegagalan untuk melakukannya dapat mengakibatkan penangguhan proyek atau penangguhan akun.

Buat akun baru dengan sekali ketuk

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Jika Anda mendukung login dengan Akun Google, Anda dapat menggunakan klien login Sekali Ketuk untuk juga memberikan pengalaman pembuatan akun tanpa kendala kepada pengguna yang tidak pernah mengarahkan mereka keluar dari konteks aplikasi Anda.

UI pendaftaran dengan sekali ketuk

Saat Anda menampilkan UI Sekali Ketuk, pengguna akan diminta untuk membuat akun baru dengan aplikasi Anda menggunakan salah satu Akun Google di perangkat mereka. Jika pengguna memilih untuk melanjutkan, Anda akan mendapatkan token ID dengan informasi profil dasar, yaitu nama, foto profil, dan alamat email terverifikasi mereka, yang dapat Anda gunakan untuk membuat akun baru.

Menerapkan pembuatan akun Sekali Ketuk memiliki dua bagian:

  • Mengintegrasikan klien Sekali Ketuk ke aplikasi Anda, yang akan dijelaskan di halaman ini. Hal ini umumnya sama dengan menggunakan login Sekali Ketuk, tetapi dengan beberapa perbedaan dalam konfigurasi.
  • Menambahkan kemampuan untuk membuat akun pengguna dari token ID Google ke backend Anda, yang dibahas dalam Menggunakan token ID pada backend.

Di mana saya dapat menggunakan pendaftaran Sekali Ketuk?

Tempat yang paling efektif untuk menawarkan pendaftaran Sekali Ketuk kepada pengguna adalah dalam konteks saat login akan mengaktifkan fitur baru. Pertama, coba loginkan pengguna dengan kredensial yang disimpan. Jika kredensial tersimpan tidak ditemukan, tawarkan untuk membuat akun baru bagi pengguna.

Sebelum memulai

Siapkan project konsol Google API dan project Android Anda seperti yang dijelaskan dalam Memulai login Sekali Ketuk.

1. Mengonfigurasi klien Sekali Ketuk

Untuk mengonfigurasi klien Sekali Ketuk untuk pembuatan akun, lakukan langkah berikut:

  • Jangan aktifkan permintaan kredensial sandi. (Daftar sekali ketuk hanya dapat dilakukan dengan autentikasi berbasis token.)
  • Aktifkan permintaan token ID Google menggunakan setGoogleIdTokenRequestOptions() dan setelan ini:

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. Melacak pembatalan UI Sekali Ketuk

Anda harus memantau apakah pengguna sudah menolak menggunakan pendaftaran Sekali Ketuk dengan menutup perintah atau mengetuk di luarnya. Hal ini bisa sesederhana properti boolean Aktivitas Anda. (Lihat Berhenti menampilkan UI Sekali Ketuk di bawah.)

3. Menampilkan UI pendaftaran Sekali Ketuk

Jika pengguna belum menolak menggunakan Sekali Ketuk untuk membuat akun baru, panggil metode beginSignIn() objek klien, dan kaitkan pemroses ke Task yang ditampilkannya. Aplikasi biasanya melakukan langkah ini saat permintaan login Sekali Ketuk tidak menemukan kredensial tersimpan—yaitu, di pemroses kegagalan permintaan login.

Klien Sekali Ketuk akan memanggil pemroses yang berhasil jika pengguna memiliki satu atau beberapa Akun Google yang disiapkan di perangkat. Dalam pemroses yang berhasil, dapatkan intent yang tertunda dari hasil Task dan teruskan ke startIntentSenderForResult() untuk memulai UI Sekali Ketuk.

Jika pengguna tidak memiliki Akun Google di perangkat, klien Sekali Ketuk akan memanggil pemroses kegagalan. Dalam hal ini, Anda tidak perlu melakukan tindakan apa pun: Anda dapat terus melanjutkan presentasi pengalaman logout pengguna, dan pengguna dapat mendaftar dengan alur pembuatan akun normal Anda.

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. Menangani respons pengguna

Respons pengguna terhadap perintah pendaftaran Sekali Ketuk akan dilaporkan ke aplikasi Anda menggunakan metode onActivityResult() Aktivitas Anda. Jika pengguna memilih untuk membuat akun, hasilnya adalah token ID Google. Jika pengguna menolak mendaftar, dengan menutup UI Sekali Ketuk atau mengetuk di luarnya, hasilnya akan ditampilkan dengan kode RESULT_CANCELED. Aplikasi Anda harus menangani kedua kemungkinan yang ada.

Membuat akun dengan token ID Google

Jika pengguna memilih untuk mendaftar dengan Akun Google, Anda bisa mendapatkan token ID untuk pengguna dengan meneruskan data intent dari onActivityResult() ke metode getSignInCredentialFromIntent() klien Sekali Ketuk. Kredensial akan memiliki properti googleIdToken non-null.

Gunakan token ID untuk membuat akun di backend (lihat Mengautentikasi dengan backend menggunakan token ID) dan membuat pengguna login.

Kredensial juga berisi detail tambahan yang Anda minta, seperti nomor telepon akun yang terverifikasi jika tersedia.

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

Berhenti menampilkan UI Sekali Ketuk

Jika pengguna menolak untuk login, panggilan ke getSignInCredentialFromIntent() akan memunculkan ApiException dengan kode status CommonStatusCodes.CANCELED. Jika hal ini terjadi, Anda harus berhenti menampilkan UI login Sekali Ketuk agar tidak mengganggu pengguna dengan perintah berulang. Contoh berikut mencapai hal ini dengan menetapkan properti di Aktivitas, yang digunakan untuk menentukan apakah akan menawarkan login Sekali Ketuk kepada pengguna; namun, Anda juga dapat menyimpan nilai ke SharedPreferences atau menggunakan beberapa metode lainnya.

Sangat penting untuk menerapkan pembatasan kapasitas Anda sendiri terhadap perintah login Sekali Ketuk. Jika Anda tidak melakukannya, dan pengguna membatalkan beberapa perintah secara berturut-turut, klien Sekali Ketuk tidak akan memintanya selama 24 jam berikutnya.

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

Langkah berikutnya

Saat pengguna menyelesaikan alur pendaftaran Sekali Ketuk, Anda akan mendapatkan token ID Google, yang mencakup beberapa informasi profil dasar: alamat email, nama lengkap, dan URL gambar profil pengguna. Bagi banyak aplikasi, informasi ini cukup untuk mengautentikasi pengguna di backend dan membuat akun baru.

Jika Anda memerlukan informasi tambahan untuk menyelesaikan pembuatan akun—misalnya, tanggal lahir pengguna—menunjukkan alur detail pendaftaran kepada pengguna, tempat Anda meminta info tambahan ini. Kemudian, kirimkan ke backend Anda untuk menyelesaikan pembuatan akun.