Jika Anda mendukung login dengan Akun Google, Anda dapat menggunakan login Sekali Ketuk klien juga untuk memberi pengguna pengalaman pembuatan akun tanpa hambatan yang tidak akan pernah membawanya dari konteks aplikasi Anda.
Saat Anda menampilkan UI Sekali Ketuk, pengguna diminta untuk membuat akun baru dengan aplikasi Anda menggunakan salah satu Akun Google di perangkatnya. Jika pengguna memilih untuk melanjutkan, Anda akan mendapatkan token ID dengan informasi profil dasar. nama, foto profil, dan alamat email terverifikasi mereka—yang dapat Anda gunakan untuk membuat akun baru.
Menerapkan pembuatan akun Sekali Ketuk terdiri dari dua bagian:
- Mengintegrasikan klien Sekali Ketuk ke aplikasi Anda, yang dijelaskan di halaman ini. Hal ini sebagian besar sama dengan menggunakan login Sekali Ketuk, tetapi dengan beberapa perbedaan konfigurasi Anda.
- Menambahkan kemampuan untuk membuat akun pengguna dari ID Google ke backend Anda token, yang dibahas dalam Menggunakan token ID pada backend.
Di mana saya sebaiknya menggunakan pendaftaran Sekali Ketuk?
Tempat paling berdampak untuk menawarkan pendaftaran Sekali Ketuk kepada pengguna adalah dalam konteks login akan mengaktifkan fitur baru. Pertama, coba buat pengguna login dengan kredensial yang disimpan. Jika kredensial tersimpan tidak ditemukan, tawarkan untuk membuat kredensial baru akun untuk pengguna.
Sebelum memulai
Siapkan project konsol Google API dan project Android seperti yang dijelaskan di Mulai menggunakan login Sekali Ketuk.
1. Mengonfigurasi klien Sekali Ketuk
Untuk mengonfigurasi klien Sekali Ketuk untuk pembuatan akun, lakukan hal berikut:
- Jangan aktifkan permintaan kredensial sandi. (Daftar dengan sekali ketuk hanya dapat dilakukan dengan autentikasi berbasis token.)
Aktifkan permintaan token ID Google menggunakan
setGoogleIdTokenRequestOptions()
dan pengaturan ini:- Tetapkan client ID server ke ID yang Anda buat di Google API konsol. Perhatikan bahwa ini adalah ID klien server Anda, bukan client ID Android Anda.
- Konfigurasikan klien untuk menampilkan semua Akun Google di perangkat—yang adalah, jangan filter berdasarkan akun yang diotorisasi.
- Atau, Anda juga dapat meminta nomor telepon terverifikasi angka untuk akun tersebut.
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 melacak apakah pengguna sudah menolak untuk menggunakan Sekali Ketuk daftar dengan menutup perintah atau mengetuk di luar perintah tersebut. Hal ini dapat berupa sederhana seperti properti boolean Aktivitas Anda. (Lihat Berhenti menampilkan Sekali Ketuk UI, di bawah.)
3. Menampilkan UI pendaftaran Sekali Ketuk
Jika pengguna belum menolak menggunakan fitur Sekali Ketuk untuk membuat akun baru, panggil
metode beginSignIn()
objek klien, dan menambahkan pemroses ke Task
akan dikembalikan. Aplikasi biasanya melakukan langkah ini jika permintaan login Sekali Ketuk tidak menemukan
kredensial yang disimpan—yaitu, di pemroses kegagalan login
permintaan.
Klien Sekali Ketuk akan memanggil pemroses yang berhasil jika pengguna memiliki satu atau beberapa
Akun Google yang disiapkan di perangkat. Di pemroses peristiwa sukses, dapatkan
intent dari hasil Task
dan teruskan ke startIntentSenderForResult()
ke
memulai UI Sekali Ketuk.
Jika pengguna tidak memiliki Akun Google di perangkat, klien Sekali Ketuk akan memanggil pemroses kegagalan. Dalam kasus ini, Anda tidak perlu melakukan tindakan apa pun: Anda dapat terus menyajikan pengalaman {i>logout<i} aplikasi, dan pengguna dapat mendaftar dengan alur pembuatan akun biasa.
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 permintaan pendaftaran Sekali Ketuk akan dilaporkan ke aplikasi Anda
menggunakan metode onActivityResult()
Aktivitas Anda. Jika pengguna memilih untuk membuat
Anda, hasilnya akan menjadi token ID Google. Jika pengguna menolak mendaftar,
baik dengan menutup UI Sekali Ketuk atau mengetuk di luarnya, hasilnya akan ditampilkan
dengan kode RESULT_CANCELED
. Aplikasi Anda harus menangani kedua kemungkinan tersebut.
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 Sekali Ketuk
metode getSignInCredentialFromIntent()
klien. Kredensial tersebut akan memiliki
properti googleIdToken
non-null.
Gunakan token ID untuk membuat akun di backend (lihat Mengautentikasi dengan backend menggunakan token ID) lalu memproses login pengguna.
Kredensial juga berisi detail tambahan yang Anda minta, seperti nomor telepon yang telah diverifikasi akun, 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 login, panggilan ke getSignInCredentialFromIntent()
akan menampilkan ApiException
dengan kode status CommonStatusCodes.CANCELED
.
Jika hal ini terjadi, Anda harus berhenti menampilkan UI login Sekali Ketuk untuk sementara
sehingga Anda tidak mengganggu pengguna
dengan perintah berulang. Contoh berikut
melakukannya dengan menetapkan properti pada Aktivitas, yang digunakannya
menentukan apakah akan menawarkan login Sekali Ketuk kepada pengguna; Namun, Anda juga bisa
simpan nilai ke SharedPreferences
atau gunakan metode lain.
Anda harus menerapkan pembatasan kapasitas untuk perintah login Sekali Ketuk. Jika tidak dilakukan, dan pengguna membatalkan beberapa perintah berturut-turut, aplikasi Sekali Ketuk tidak akan meminta konfirmasi pengguna selama 24 jam ke depan.
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, mencakup beberapa informasi profil dasar: alamat email pengguna, nama lengkap, dan URL foto profil Anda. Untuk banyak aplikasi, informasi ini cukup bagi Anda untuk mengautentikasi pengguna di backend lalu membuat akun baru.
Jika Anda memerlukan informasi tambahan untuk menyelesaikan pembuatan akun—misalnya, tanggal lahir pengguna—memberi pengguna alur detail pendaftaran, di mana Anda meminta info tambahan ini. Kemudian, kirimkan ke backend Anda untuk menyelesaikan pembuatan akun.