Kullanıcının telefonuna SMS mesajı göndererek oturum açmak için Firebase Authentication'ü kullanabilirsiniz. Kullanıcı, SMS mesajında yer alan tek kullanımlık kodu kullanarak oturum açar.
Uygulamanıza telefon numarası ile oturum açma özelliğini eklemenin en kolay yolu FirebaseUI'yi kullanmaktır. FirebaseUI, telefon numarası ile oturum açma özelliğinin yanı sıra şifre tabanlı ve birleşik oturum açma için oturum açma akışlarını uygulayan bir hazır oturum açma widget'ı içerir. Bu dokümanda, Firebase SDK'sı kullanılarak telefon numarası ile oturum açma akışının nasıl uygulanacağı açıklanmaktadır.
Başlamadan önce
- Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
-
Modül (uygulama düzeyi) Gradle dosyanıza (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
) Android için Firebase Authentication kitaplığının bağımlılığını ekleyin. Kitaplık sürümlendirmesini kontrol etmek için Firebase Android BoM simgesini kullanmanızı öneririz.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının daima uyumlu sürümlerini kullanır.
(Alternatif) BoM
Firebase BoM kullanmamayı seçerseniz her Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM'ı kullanmanızı önemle tavsiye ederiz. Bu, tüm sürümlerin uyumlu olmasını sağlar.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0") }
- Uygulamanızı henüz Firebase projenize bağlamadıysanız Firebase konsolundan bağlama
- Uygulamanızın SHA-1 karmasını Firebase konsolunda henüz ayarlamadıysanız bunu yapın. Uygulamanızın SHA-1 karmasını bulma hakkında bilgi edinmek için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
Güvenlikle ilgili sorunlar
Yalnızca telefon numarası kullanarak kimlik doğrulama, kullanışlı olsa da telefon numarasının sahipliği kullanıcılar arasında kolayca aktarılabileceğinden diğer mevcut yöntemlerden daha az güvenlidir. Ayrıca, birden fazla kullanıcı profiline sahip cihazlarda SMS mesajı alabilen tüm kullanıcılar cihazın telefon numarasını kullanarak bir hesapta oturum açabilir.
Uygulamanızda telefon numarasına dayalı oturum açma özelliğini kullanıyorsanız bu özelliği daha güvenli oturum açma yöntemleriyle birlikte sunmalı ve kullanıcıları telefon numarasına dayalı oturum açma özelliğinin güvenlikle ilgili avantajları ve dezavantajları hakkında bilgilendirmelisiniz.
Firebase projeniz için telefon numarasıyla oturum açmayı etkinleştirme
Kullanıcıların SMS ile oturum açması için önce Firebase projenizde telefon numarası ile oturum açma yöntemini etkinleştirmeniz gerekir:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum Açma Yöntemi sayfasında Telefon Numarası oturum açma yöntemini etkinleştirin.
Uygulama doğrulamayı etkinleştirme
Telefon numarası kimlik doğrulamasını kullanmak için Firebase'in, telefon numarası ile oturum açma isteklerinin uygulamanızdan geldiğini doğrulayabilmesi gerekir. Firebase Authentication bunu üç şekilde yapar:
- Play Integrity API: Kullanıcının Google Play services yüklü bir cihazı varsa ve Firebase Authentication, Play Integrity API ile cihazı meşru olarak doğrulayabiliyorsa telefon numarasıyla oturum açma işlemi devam edebilir. Play Integrity API, projenizde değil, Google'ın sahip olduğu bir projede Firebase Authentication tarafından etkinleştirilmiştir. Bu, projenizdeki Play Integrity API kotalarına dahil edilmez. Play Integrity Desteği, Authentication SDK v21.2.0 veya sonraki sürümlerde
(Firebase BoM v31.4.0 veya sonraki sürümlerde) kullanılabilir.
Play Integrity'yi kullanmak için uygulamanızın SHA-256 parmak izini henüz belirtmediyseniz Firebase konsolunun Proje ayarlarından bunu yapın. Uygulamanızın SHA-256 parmak izini alma hakkında ayrıntılı bilgi için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
- reCAPTCHA doğrulaması: Play Integrity'in kullanılamadığı durumlarda (ör. kullanıcının Google Play services yüklü olmadığı bir cihazı varsa) Firebase Authentication, telefonda oturum açma akışını tamamlamak için reCAPTCHA doğrulamasını kullanır. reCAPTCHA isteği genellikle kullanıcının herhangi bir şey çözmesi gerekmeden tamamlanabilir. Bu akış için uygulamanızla bir SHA-1 ilişkilendirilmesi gerektiğini unutmayın. Bu akış için API anahtarınızın
PROJECT_ID.firebaseapp.com
için sınırsız veya izin verilenler listesinde olması da gerekir.reCAPTCHA'nın tetiklendiği bazı senaryolar:
- Son kullanıcının cihazında Google Play services yüklü değilse.
- Uygulama Google Play Store üzerinden dağıtılmıyorsa (Authentication SDK v21.2.0 veya sonraki sürümlerde).
- Elde edilen SafetyNet jetonu geçerli değilse (Authentication SDK sürümleri 21.2.0 ve önceki sürümlerde).
Uygulama doğrulaması için SafetyNet veya Play Integrity kullanıldığında SMS şablonundaki
%APP_NAME%
alanı, Google Play Store alanından belirlenen uygulama adıyla doldurulur. reCAPTCHA'nın tetiklendiği senaryolarda%APP_NAME%
,PROJECT_ID.firebaseapp.com
olarak doldurulur.
forceRecaptchaFlowForTesting
ile reCAPTCHA doğrulama akışını zorlayabilirsiniz.
setAppVerificationDisabledForTesting
ile uygulama doğrulamasını (hayali telefon numaraları kullanırken) devre dışı bırakabilirsiniz.
Sorun giderme
Uygulama doğrulaması için reCAPTCHA kullanılırken "Başlangıç durumu eksik" hatası
Bu durum, reCAPTCHA akışı başarıyla tamamlandığında ancak kullanıcıyı yerel uygulamaya geri yönlendirmediğinde ortaya çıkabilir. Bu durumda kullanıcı, yedek URL'ye (
PROJECT_ID.firebaseapp.com/__/auth/handler
) yönlendirilir. Firefox tarayıcılarında yerel uygulama bağlantılarının açılması varsayılan olarak devre dışıdır. Firefox'ta yukarıdaki hatayı görüyorsanız uygulama bağlantılarının açılmasını etkinleştirmek için Android için Firefox'u bağlantıları yerel uygulamalarda açacak şekilde ayarlama başlıklı makaledeki adımları uygulayın.
Kullanıcının telefonuna bir doğrulama kodu gönderin
Telefon numarası ile oturum açmayı başlatmak için kullanıcıya telefon numarasını yazmasını isteyen bir arayüz gösterin. Yasal şartlar değişiklik gösterir ancak en iyi uygulama olarak ve kullanıcılarınıza beklentileri belirlemek için telefonla oturum açma özelliğini kullanırlarsa doğrulama için SMS mesajı alabileceğini ve standart ücretlerin geçerli olacağını onlara bildirmeniz gerekir.
Ardından, Firebase'ın kullanıcının telefon numarasını doğrulamasını istemek için telefon numarasını PhoneAuthProvider.verifyPhoneNumber
yöntemine iletin. Örneğin:
Kotlin
val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks .build() PhoneAuthProvider.verifyPhoneNumber(options)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
verifyPhoneNumber
yöntemi yeniden girişlidir: Bir etkinliğin onStart
yönteminde olduğu gibi birden çok kez çağırırsanız verifyPhoneNumber
yöntemi, orijinal istek zaman aşımına uğramadığı sürece ikinci bir SMS göndermez.
Uygulamanız kullanıcı oturum açmadan önce kapanırsa (ör. kullanıcı SMS uygulamasını kullanırken) telefon numarası ile oturum açma işlemini devam ettirmek için bu davranışı kullanabilirsiniz. verifyPhoneNumber
işlevini çağırdıktan sonra doğrulamanın devam ettiğini belirten bir işaret ayarlayın. Ardından işareti Etkinliğinizin onSaveInstanceState
yöntemine kaydedin ve onRestoreInstanceState
yönteminde geri yükleyin. Son olarak, Etkinlik'teki onStart
yönteminde doğrulamanın devam edip etmediğini kontrol edin. Devam ediyorsa verifyPhoneNumber
yöntemini tekrar çağırın. Doğrulama tamamlandığında veya başarısız olduğunda işareti kaldırdığınızdan emin olun (
Doğrulama geri çağırma bölümüne bakın).
Ekran döndürme ve diğer etkinlik yeniden başlatma durumlarını kolayca yönetmek için etkinliğinizi verifyPhoneNumber
yöntemine iletin. Etkinlik durduğunda geri çağırma işlevleri otomatik olarak ayrılır. Bu nedenle, geri çağırma yöntemlerine UI geçiş kodunu özgürce yazabilirsiniz.
Firebase tarafından gönderilen SMS mesajı, Auth örneğinizdeki setLanguageCode
yöntemi aracılığıyla kimlik doğrulama dili belirtilerek de yerelleştirilebilir.
Kotlin
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
PhoneAuthProvider.verifyPhoneNumber
işlevini çağırırken, isteğin sonuçlarını işleyen geri çağırma işlevlerinin uygulamalarını içeren bir OnVerificationStateChangedCallbacks
örneği de sağlamanız gerekir. Örneğin:
Kotlin
callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:$credential") signInWithPhoneAuthCredential(credential) } override fun onVerificationFailed(e: FirebaseException) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e) if (e is FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e is FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e is FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } override fun onCodeSent( verificationId: String, token: PhoneAuthProvider.ForceResendingToken, ) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:$verificationId") // Save verification ID and resending token so we can use them later storedVerificationId = verificationId resendToken = token } }
Java
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:" + credential); signInWithPhoneAuthCredential(credential); } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e); if (e instanceof FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e instanceof FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken token) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:" + verificationId); // Save verification ID and resending token so we can use them later mVerificationId = verificationId; mResendToken = token; } };
Doğrulama geri çağırmaları
Çoğu uygulamada onVerificationCompleted
, onVerificationFailed
ve onCodeSent
geri aramalarını uygularsınız. Uygulamanızın gereksinimlerine bağlı olarak onCodeAutoRetrievalTimeOut
'ü de uygulayabilirsiniz.
onVerificationCompleted(PhoneAuthCredential)
Bu yöntem iki durumda çağrılır:
- Anında doğrulama: Bazı durumlarda, telefon numarası doğrulama kodu gönderilmeden veya girilmeden anında doğrulanabilir.
- Otomatik alma: Google Play Hizmetleri, bazı cihazlarda gelen doğrulama SMS'sini otomatik olarak algılayabilir ve kullanıcının herhangi bir işlem yapmasına gerek kalmadan doğrulama işlemini gerçekleştirebilir. (Bu özellik bazı operatörlerde kullanılamayabilir.) Bu işlem için SMS mesajının sonuna 11 karakterlik bir karma oluşturma işlemi eklenmiş olan SMS Retriever API kullanılır.
PhoneAuthCredential
nesnesini kullanabilirsiniz.
onVerificationFailed(FirebaseException)
Bu yöntem, geçersiz bir telefon numarası veya doğrulama kodu belirten bir istek gibi geçersiz bir doğrulama isteğine yanıt olarak çağrılır.
onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken)
İsteğe bağlı. Bu yöntem, doğrulama kodu sağlanan telefon numarasına SMS ile gönderildikten sonra çağrılır.
Bu yöntem çağrıldığında çoğu uygulama, kullanıcıdan SMS mesajındaki doğrulama kodunu yazmasını isteyen bir kullanıcı arayüzü gösterir. (Bu sırada arka planda otomatik doğrulama devam ediyor olabilir.) Ardından, kullanıcı doğrulama kodunu yazdıktan sonra doğrulama kodunu ve yönteme iletilen doğrulama kimliğini kullanarak bir PhoneAuthCredential
nesnesi oluşturabilirsiniz. Bu nesneyi de kullanıcının oturum açması için kullanabilirsiniz. Ancak bazı uygulamalar, doğrulama kodu kullanıcı arayüzünü göstermeden önce onCodeAutoRetrievalTimeOut
çağrılana kadar bekleyebilir (önerilmez).
onCodeAutoRetrievalTimeOut(String verificationId)
İsteğe bağlı. Bu yöntem, verifyPhoneNumber
için belirtilen zaman aşımı süresi dolduktan sonra onVerificationCompleted
tetiklenmeden çağrılır. SMS'lerin otomatik olarak alınamaması nedeniyle, SIM kartı olmayan cihazlarda bu yöntem hemen çağrılır.
Bazı uygulamalar, otomatik doğrulama süresi dolana kadar kullanıcı girişini engeller ve ancak o zaman kullanıcıdan SMS mesajındaki doğrulama kodunu yazmasını isteyen bir kullanıcı arayüzü gösterir (önerilmez).
PhoneAuthCredential nesnesi oluşturma
Kullanıcı, Firebase'ın telefonuna gönderdiği doğrulama kodunu girdikten sonra doğrulama kodunu ve onCodeSent
veya onCodeAutoRetrievalTimeOut
geri çağırma işlevine iletilen doğrulama kimliğini kullanarak bir PhoneAuthCredential
nesnesi oluşturun. (onVerificationCompleted
çağrıldığında doğrudan bir PhoneAuthCredential
nesnesi alırsınız. Bu nedenle bu adımı atlayabilirsiniz.)
PhoneAuthCredential
nesnesini oluşturmak için PhoneAuthProvider.getCredential
işlevini çağırın:
Kotlin
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Kullanıcının oturumunu açma
onVerificationCompleted
geri çağırma işlevinde veya PhoneAuthProvider.getCredential
'yi çağırarak bir PhoneAuthCredential
nesnesi aldıktan sonra, PhoneAuthCredential
nesnesini FirebaseAuth.signInWithCredential
'a ileterek oturum açma akışını tamamlayın:
Kotlin
private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) { auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = task.result?.user } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.exception) if (task.exception is FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } // Update UI } } }
Java
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = task.getResult().getUser(); // Update UI } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.getException()); if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } } } }); }
Hayali telefon numaralarıyla test etme
Geliştirme için Firebase konsolu üzerinden hayali telefon numaraları ayarlayabilirsiniz. Hayali telefon numaralarıyla test yapmanın avantajları şunlardır:
- Kullanım kotanızı tüketmeden telefon numarası kimlik doğrulamasını test edin.
- Gerçek bir SMS mesajı göndermeden telefon numarası kimlik doğrulamasını test edin.
- Aynı telefon numarasıyla art arda testler çalıştırın. Bu sayede, inceleme uzmanı test için aynı telefon numarasını kullanırsa uygulama mağazası inceleme sürecinde reddedilme riski en aza indirilir.
- Google Play Hizmetleri olmadan iOS simülasyon cihazında veya Android emülatöründe geliştirme yapma gibi ek çaba gerektirmeyen geliştirme ortamlarında kolayca test edin.
- Normalde üretim ortamındaki gerçek telefon numaralarına uygulanan güvenlik kontrolleri tarafından engellenmeden entegrasyon testleri yazma
Hayali telefon numaraları şu koşulları karşılamalıdır:
- Gerçekten kurgusal olan ve mevcut olmayan telefon numaraları kullandığınızdan emin olun. Firebase Authentication, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numarası olarak ayarlamanıza izin vermez. Bir seçenek, ABD test telefon numaraları olarak 555 ön ekiyle başlayan numaralar kullanmaktır. Örneğin: +1 650-555-3434
- Telefon numaralarının uzunluk ve diğer kısıtlamalar açısından doğru biçimlendirilmesi gerekir. Bu numaralar, gerçek kullanıcıların telefon numaralarıyla aynı doğrulama sürecine tabi tutulur.
- Geliştirme için en fazla 10 telefon numarası ekleyebilirsiniz.
- Tahmin edilmesi zor test telefon numaraları/kodları kullanın ve bunları sık sık değiştirin.
Hayali telefon numaraları ve doğrulama kodları oluşturma
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde, telefon sağlayıcıyı etkinleştirmediyseniz etkinleştirin.
- Test edilecek telefon numaraları akordeon menüsünü açın.
- Test etmek istediğiniz telefon numarasını girin. Örneğin: +1 650-555-3434.
- Söz konusu numara için 6 haneli doğrulama kodunu girin. Örneğin: 654321.
- Numarayı ekleyin. Gerekirse fareyle ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak telefon numarasını ve kodunu silebilirsiniz.
Manuel test
Uygulamanızda doğrudan hayali bir telefon numarası kullanmaya başlayabilirsiniz. Bu sayede, geliştirme aşamalarında kota sorunları veya tarama sorunları yaşamadan manuel test yapabilirsiniz. Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen de test edebilirsiniz.
Hayali telefon numarasını girip doğrulama kodunu gönderdiğinizde gerçek bir SMS gönderilmez. Bunun yerine, oturumu tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir.
Oturum açma işlemi tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. Kullanıcı, gerçek telefon numarası kullanıcısıyla aynı davranışa ve özelliklere sahiptir ve Realtime Database/Cloud Firestore'a ve diğer hizmetlere aynı şekilde erişebilir. Bu işlem sırasında oluşturulan kimlik jetonu, gerçek telefon numarası kullanıcısıyla aynı imzaya sahiptir.
Erişimi daha da kısıtlamak istiyorsanız bu kullanıcıları sahte kullanıcı olarak ayırt etmek için özel hak talepleri aracılığıyla test rolü ayarlayabilirsiniz.
Test için reCAPTCHA akışını manuel olarak tetiklemek isterseniz forceRecaptchaFlowForTesting()
yöntemini kullanın.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Entegrasyon testi
Firebase Authentication, manuel testlere ek olarak telefonla kimlik doğrulama testi için entegrasyon testleri yazmaya yardımcı olacak API'ler sağlar. Bu API'ler, web'de reCAPTCHA koşulunu ve iOS'te sessiz push bildirimlerini devre dışı bırakarak uygulama doğrulamasını devre dışı bırakır. Bu sayede, bu akışlarda otomasyon testini yapmak mümkün olur ve daha kolay uygulanır. Ayrıca, Android'de anında doğrulama akışlarını test etme olanağı sunarlar.
Android'de, signInWithPhoneNumber
aramasından önce setAppVerificationDisabledForTesting()
araması yapın. Bu işlem, uygulama doğrulamasını otomatik olarak devre dışı bırakır ve telefon numarasını manuel olarak çözmeden geçmenize olanak tanır. Play Integrity ve reCAPTCHA devre dışı bırakılmış olsa bile gerçek bir telefon numarası kullanıldığında oturum açılmaz. Bu API ile yalnızca kurgusal telefon numaraları kullanılabilir.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
numaralı telefonu hayali bir numarayla aramak, onCodeSent
geri aramasını tetikler. Bu aramada ilgili doğrulama kodunu sağlamanız gerekir. Bu sayede Android emülatörlerinde test yapabilirsiniz.
Java
String phoneNum = "+16505554567"; String testVerificationCode = "123456"; // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. FirebaseAuth auth = FirebaseAuth.getInstance(); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNum) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. MainActivity.this.enableUserManuallyInputCode(); } @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { // Sign in with the credential // ... } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // ... } }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin
val phoneNum = "+16505554567" val testVerificationCode = "123456" // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. val options = PhoneAuthOptions.newBuilder(Firebase.auth) .setPhoneNumber(phoneNum) .setTimeout(30L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onCodeSent( verificationId: String, forceResendingToken: PhoneAuthProvider.ForceResendingToken, ) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. this@MainActivity.enableUserManuallyInputCode() } override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { // Sign in with the credential // ... } override fun onVerificationFailed(e: FirebaseException) { // ... } }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
Ayrıca, Android'de otomatik alma akışlarını test etmek için setAutoRetrievedSmsCodeForPhoneNumber
numaralı telefonu arayarak hayali bir numara ve otomatik alma için ilgili doğrulama kodu ayarlayabilirsiniz.
verifyPhoneNumber
çağrıldığında doğrudan PhoneAuthCredential
ile onVerificationCompleted
tetiklenir. Bu özellik yalnızca kurgusal telefon numaralarında çalışır.
Uygulamanızı Google Play Store'da yayınlarken bu özelliğin devre dışı olduğundan ve uygulamanızda kurgusal telefon numaralarının kodla yazılmadığından emin olun.
Java
// The test phone number and code should be whitelisted in the console. String phoneNumber = "+16505554567"; String smsCode = "123456"; FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings(); // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin
// The test phone number and code should be whitelisted in the console. val phoneNumber = "+16505554567" val smsCode = "123456" val firebaseAuth = Firebase.auth val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode) val options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
Sonraki adımlar
Kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açarken kullandığı kimlik bilgilerine (yani kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
-
Uygulamalarınızda, kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Kullanıcıları Yönet başlıklı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();