One Tap ile oturum açma istemcisini kullanarak kullanıcıdan veri alma izni isteyin Uygulamanızda daha önce oturum açmak için kullandıkları kimlik bilgilerinden birini kullanıyor. Bu kimlik bilgileri bir Google Hesabı veya kullanıcı adı-şifre kombinasyonu olabilir Chrome, Android otomatik doldurma veya Smart Lock kullanarak Google'da kaydettikleri Şifreler.
Kimlik bilgileri başarıyla alındıktan sonra sorunsuz bir şekilde bunları kullanabilirsiniz. kullanıcının uygulamanızda oturum açmasını sağlayın.
Kullanıcı herhangi bir kimlik bilgisi kaydetmemişse kullanıcı arayüzü gösterilmez ve şunları yapabilirsiniz: normal oturum açma deneyiminizi nasıl kullanacağınızı göstereceğim.
One Tap ile oturum açma özelliğini nerede kullanmalıyım?
Uygulamanız kullanıcıların oturum açmasını gerektiriyorsa oturum açma sırasında One Tap kullanıcı arayüzünü gösterin tıklayın. Bu özellik, halihazırda "Google ile oturum aç" özelliğini etkinleştirmiş olsanız bile yararlı olabilir düğmesi: One Tap kullanıcı arayüzü, yalnızca bir not veya not: Bu, seyrek olarak oturum açan kullanıcılara, oturum açma yöntemini kullanarak oturum açmalarını ve yanlışlıkla oturum açmalarını önlemek için ve uygulamanızla yeni hesaplar oluşturabilirsiniz.
Uygulamanızda oturum açma isteğe bağlıysa oturum açarak iyileştirilmiş bir deneyim sunan yeni bir ekran seçin. Örneğin, kullanıcılar oturumunuz kapalıyken uygulamanızla içeriklere göz atabilirsiniz ancak yalnızca yorum yayınlayabilir veya içerik ekleyebilir alışveriş sepetine ürün ekledikten sonra, bu, oturum açma One Tap ile oturum açma.
İsteğe bağlı oturum açma uygulamalarının oturum açma ekranlarında One Tap ile oturum açma özelliğini de kullanması gerekir. (yukarıda belirtilen nedenlerden dolayı) kabul edilir.
Başlamadan önce
- Google API'leri konsol projenizi ve Android projenizi aşağıdaki sayfada açıklandığı şekilde ayarlayın: One Tap ile oturum açmayı kullanmaya başlayın.
- Şifre tabanlı oturum açmayı destekliyorsanız uygulamanızı şunun için optimize edin: otomatik doldurma (veya Şifreler için Smart Lock'u kullanma) sayesinde, şifre kimlik bilgileri girmeniz gerekiyor.
1. One Tap ile oturum açma istemcisini yapılandırma
One Tap ile oturum açma istemcisini, kayıtlı e-posta adresleriyle kullanıcıların oturum açmasını sağlayacak şekilde yapılandırabilirsiniz. veya kayıtlı Google Hesapları gibi (Böylece projede her ikisinin de desteklenmesi önerilir. yeni kullanıcılar için tek dokunuşla hesap oluşturma ve otomatik ya da tek dokunuşla oturum açmayı etkinleştir olabildiğince çok sayıda geri gelen kullanıcı için)
Uygulamanızda şifre tabanlı oturum açma kullanılıyorsa şunları yapmak için setPasswordRequestOptions()
kullanın:
Şifre kimlik bilgisi isteklerini etkinleştirme.
Uygulamanız Google ile Oturum Açma özelliğini kullanıyorsa setGoogleIdTokenRequestOptions()
ile oturum açma
Google kimliği jeton isteklerini etkinleştirin ve yapılandırı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 yetkili hesaplara göre filtreleyecek şekilde yapılandırın. Bunu etkinleştirdiğinizde seçeneğinde, One Tap istemcisi, kullanıcılardan uygulamanızda yalnızca Geçmişte kullanmış oldukları Google Hesapları. Bu sayede kullanıcılar bir hesapları olup olmadığından emin olmadıklarında veya hangi ve kullanıcıların yanlışlıkla yeni hesap oluşturmalarını önlemek için kullandıkları daha fazla bilgi edineceksiniz.
Mümkün olduğunda kullanıcıların otomatik olarak oturum açmasını istiyorsanız özelliği etkinleştirin
setAutoSelectEnabled()
ile birlikte. Otomatik oturum açma şu durumlarda kullanılabilir: karşılandığına dikkat edin:- Kullanıcının uygulamanız için kayıtlı tam olarak bir kimlik bilgisi vardır. Kaydedilen bir şifrenizi veya kayıtlı bir Google Hesabı'nı kullanabilirsiniz.
- Kullanıcı, hesabında otomatik oturum açmayı devre dışı bırakmamış olabilir Google Hesabı ayarları.
İsteğe bağlı olsa da, tek seferlik rastgele sayı veya oturum açma güvenliğini artırır ve tekrar saldırılarını önler. Tekliflerinizi otomatikleştirmek ve optimize etmek için setNonce eklemesi gerekir. SafetyNet'in sayfalarına göz atın Tek seferlik rastgele sayı edinme bölümüne bakın.
Java
public class YourActivity extends AppCompatActivity { // ... private SignInClient oneTapClient; private BeginSignInRequest signInRequest; @Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); oneTapClient = Identity.getSignInClient(this); signInRequest = BeginSignInRequest.builder() .setPasswordRequestOptions(PasswordRequestOptions.builder() .setSupported(true) .build()) .setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder() .setSupported(true) // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.default_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build()) // Automatically sign in when exactly one credential is retrieved. .setAutoSelectEnabled(true) .build(); // ... } // ... }
Kotlin
class YourActivity : AppCompatActivity() { // ... private lateinit var oneTapClient: SignInClient private lateinit var signInRequest: BeginSignInRequest override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) oneTapClient = Identity.getSignInClient(this) signInRequest = BeginSignInRequest.builder() .setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder() .setSupported(true) .build()) .setGoogleIdTokenRequestOptions( BeginSignInRequest.GoogleIdTokenRequestOptions.builder() .setSupported(true) // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.your_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build()) // Automatically sign in when exactly one credential is retrieved. .setAutoSelectEnabled(true) .build() // ... } // ... }
2. Oturum açmış kullanıcı olup olmadığını kontrol edin
Etkinliğiniz oturum açmış veya oturumu kapatmış bir kullanıcı tarafından kullanılabiliyorsa şunu kontrol edin: One Tap ile oturum açma kullanıcı arayüzünü görüntülemeden önce kullanıcının durumu.
Kullanıcının uygulamayı kullanmayı reddedip reddetmediğini de takip etmeniz gerekir. One Tap ile, istemi kapatarak veya dışına dokunarak oturum açabilirsiniz. Bu kadar basit bir boole özelliği olabilir. (Aşağıdaki One Tap kullanıcı arayüzünü göstermeyi durdurma bölümüne bakın.)
3. One Tap ile oturum açma kullanıcı arayüzünü görüntüleme
Kullanıcı oturum açmamışsa ve One Tap ile oturum açmayı kullanmayı reddetmemişse:
istemci nesnesinin beginSignIn()
yöntemini çağırın ve
Task
değerini döndürür. Uygulamalar genellikle bunu Etkinlik'in onCreate()
yönteminde yapar
ekran geçişlerinden sonra nasıl
uygulanacağını ele alacağız.
One Tap istemcisi, kullanıcının kaydedilmiş herhangi bir öğe varsa başarılı dinleyiciyi arar
kimlik bilgisidir. Başarı dinleyicisinde, beklemedeki niyeti
Task
sonucunu alıp startIntentSenderForResult()
adlı kullanıcıya ileterek
One Tap ile oturum açma kullanıcı arayüzü.
Kullanıcının kayıtlı bir kimlik bilgisi yoksa One Tap istemcisi yardımcı olur. Bu durumda herhangi bir işlem yapmanız gerekmez, dilerseniz devam edebilirsiniz Uygulamada oturum açılmadan önce gösterilen deneyimi sunmak. Ancak One Tap'i destekliyorsanız sorunsuz bir hesap oluşturma süreci için bu akışı sahip olacaksınız. Tek dokunuşla yeni hesap oluşturma başlıklı makaleyi inceleyin.
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 saved credentials found. Launch the One Tap sign-up flow, or
// do nothing and continue presenting the signed-out UI.
Log.d(TAG, e.getLocalizedMessage());
}
});
Kotlin
oneTapClient.beginSignIn(signInRequest)
.addOnSuccessListener(this) { result ->
try {
startIntentSenderForResult(
result.pendingIntent.intentSender, REQ_ONE_TAP,
null, 0, 0, 0, null)
} catch (e: IntentSender.SendIntentException) {
Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
}
}
.addOnFailureListener(this) { e ->
// No saved credentials found. Launch the One Tap sign-up flow, or
// do nothing and 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 oturum açma istemine verdiği yanıt uygulamanıza bildirilir
Etkinliğinizin onActivityResult()
yöntemini kullanarak. Kullanıcı oturum açmayı seçerse
sonuç, kayıtlı bir kimlik bilgisi olacaktır. Kullanıcı oturum açmayı reddettiyse:
One Tap kullanıcı arayüzünü kapattığınızda veya dışına dokunduğunuzda sonuç,
kod RESULT_CANCELED
. Uygulamanızın her iki olasılığı da karşılaması gerekir.
Alınan kimlik bilgileriyle oturum açma
Kullanıcı, kimlik bilgilerini uygulamanızla paylaşmayı seçtiyse şu şekilde alabilirsiniz:
Amaç verilerini onActivityResult()
kaynağından One Tap istemcisinin hesabına iletme
getSignInCredentialFromIntent()
yöntemini çağırın. Kimlik bilgisinde boş değerli olmayan bir değer olacaktır
Kullanıcı bir Google Hesabı kimlik bilgisini şununla paylaştıysa googleIdToken
mülkü:
uygulamanıza veya kullanıcı kayıtlı bir şifre paylaştıysa boş değerli olmayan bir password
özelliğine dokunun.
Uygulamanızın arka ucuyla kimlik doğrulamak için kimlik bilgisini kullanın.
- Kullanıcı adı ve şifre çifti alındıysa aynı hesapla oturum açmak için bunları kullanın. kullanıcı tarafından manuel olarak sağlanması gerektiği gibi.
Google Hesabı kimlik bilgileri alındıysa kimlik doğrulamak için kimlik jetonunu kullanın test edebilirsiniz. Tekrar oynatmayı önlemek için tek seferlik rastgele sayı kullanmayı seçtiyseniz arka uç sunucunuzdaki yanıt değerini kontrol eder. Görüntüleyin Kimlik jetonlarını kullanarak arka uçla kimlik doğrulayın.
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(); String username = credential.getId(); String password = credential.getPassword(); if (idToken != null) { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token."); } else if (password != null) { // Got a saved username and password. Use them to authenticate // with your backend. Log.d(TAG, "Got password."); } } 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 val username = credential.id val password = credential.password when { idToken != null -> { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token.") } password != null -> { // Got a saved username and password. Use them to authenticate // with your backend. Log.d(TAG, "Got password.") } else -> { // Shouldn't happen. Log.d(TAG, "No ID token or password!") } } } 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ü geçici olarak devre dışı bırakmanız gerekir.
tekrar eden istemlerle kullanıcılarınızı rahatsız etmeyin. Aşağıdaki örnekte,
bunu, Etkinlik üzerinde bir özellik ayarlayarak
kullanıcıya One Tap ile oturum açma olanağı sunma; ancak aynı zamanda
SharedPreferences
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})") } } } } } } // ... }
5. Oturumu kapatma işlemini gerçekleştirme
Kullanıcı, uygulamanızda oturumu kapattığında One Tap istemcisinin signOut()
yöntemini çağırın.
signOut()
çağrıldığında, kullanıcı tekrar oturum açana kadar otomatik oturum açma devre dışı bırakılır.
Otomatik oturum açmayı kullanmıyor olsanız bile, bu adım önemlidir Kullanıcılar uygulamanızda oturum kapattığında, cihazdaki herhangi bir Kullandığınız Play hizmetleri API'leri de sıfırlanır.
Sonraki adımlar
One Tap istemcisini Google kimlik bilgilerini alacak şekilde yapılandırdıysanız uygulamanız artık kullanıcılarınızın kimliğini temsil eden Google kimliği jetonları alabilir Google Hesapları. Öğren bu jetonları arka uçta nasıl kullanabileceğinizi öğrenin.
Google ile Oturum Açma'yı destekliyorsanız One Tap istemcisini kullanarak sorunsuz hesap oluşturma süreci uygulamanıza.