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.
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:
- Şifre kimlik bilgisi isteklerini etkinleştirmeyin. (Yalnızca tek dokunuşla kaydolabilirsiniz. (jeton tabanlı kimlik doğrulama ile).
setGoogleIdTokenRequestOptions()
ve şu ayarları kullanın:- Sunucu istemci kimliğini, Google API'lerinde oluşturduğunuz kimlik olarak ayarlayın. konsolu hakkında daha fazla bilgi edinin. Bunun, sunucunuzun istemci kimliğidir. Android istemci kimliğiniz.
- İstemciyi, cihazdaki tüm Google Hesaplarını gösterecek şekilde yapılandırın. yetkili hesaplara göre filtrelemeyin.
- İsteğe bağlı olarak, doğrulanmış telefon numarasını da isteyebilirsiniz. numara hesap için.
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.