Kullanıcının telefonuna SMS mesajı göndererek kullanıcının oturum açmasını sağlamak 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ıyla oturum açma eklemenin en kolay yolu, şifre tabanlı ve birleşik oturum açmanın yanı sıra telefon numarasıyla oturum açma için oturum açma akışlarını uygulayan bir açılır oturum açma widget'ı içeren FirebaseUI'yi kullanmaktır. -içinde. Bu belgede, Firebase SDK kullanılarak telefon numarasıyla oturum açma akışının nasıl uygulanacağı açıklanmaktadır.
Sen başlamadan önce
- Henüz yapmadıysanız Android projenize Firebase'i ekleyin .
- Modülünüzde (uygulama düzeyinde) Gradle dosyanızda (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
), Firebase Authentication bağımlılığını ekleyin Android için kütüphane. Kitaplık sürümlerini kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.6.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'yi kullandığınızda uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.
Kotlin'e özgü bir kütüphane modülü mü arıyorsunuz? Ekim 2023'ten itibaren (Firebase BoM 32.5.0) hem Kotlin hem de Java geliştiricileri ana kütüphane modülüne güvenebilecekler (ayrıntılar için bu girişimle ilgili SSS'ye bakın).(Alternatif) BoM'yi kullanmadan Firebase kitaplığı bağımlılıklarını ekleyin
Firebase BoM'yi kullanmamayı tercih ederseniz her Firebase kitaplığı 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 tüm sürümlerin uyumlu olmasını sağlayan BoM'yi kullanmanızı önemle tavsiye ettiğimizi unutmayın.
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:22.3.0") }
- Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolundan yapın.
- Firebase konsolunda uygulamanızın SHA-1 karmasını henüz ayarlamadıysanız bunu yapın. Uygulamanızın SHA-1 karma değerini bulma hakkında bilgi için İstemcinizin Kimlik Doğrulamasını Yapma konusuna bakın.
Güvenlik endişeleri
Yalnızca telefon numarası kullanılarak yapılan kimlik doğrulama, uygun olmasına rağmen, diğer mevcut yöntemlere göre daha az güvenlidir çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolaylıkla aktarılabilir. Ayrıca, birden fazla kullanıcı profiline sahip cihazlarda, SMS mesajı alabilen herhangi bir kullanıcı, cihazın telefon numarasını kullanarak bir hesapta oturum açabilir.
Uygulamanızda telefon numarasına dayalı oturum açmayı kullanıyorsanız, bunu daha güvenli oturum açma yöntemlerinin yanında sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik açısından getireceği ödünler konusunda bilgilendirmelisiniz.
Firebase projeniz için Telefon Numarasıyla oturum açmayı etkinleştirin
Kullanıcıların SMS ile oturum açmasını sağlamak için öncelikle Firebase projenizde Telefon Numarasıyla 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ıyla oturum açma yöntemini etkinleştirin.
Firebase'in telefon numarasıyla oturum açma isteği kotası, çoğu uygulamanın etkilenmeyeceği kadar yüksektir. Ancak telefon kimlik doğrulamasıyla çok yüksek sayıda kullanıcının oturum açması gerekiyorsa fiyatlandırma planınızı yükseltmeniz gerekebilir. Fiyatlandırma sayfasına bakın.
Uygulama doğrulamayı etkinleştir
Telefon numarası kimlik doğrulamasını kullanmak için Firebase'in, telefon numarasıyla oturum açma isteklerinin uygulamanızdan geldiğini doğrulayabilmesi gerekir. Firebase Authentication'ın bunu başarmasının üç yolu vardır:
- Play Integrity API : Bir kullanıcının Google Play hizmetlerinin yüklü olduğu bir cihazı varsa ve Firebase Authentication, Play Integrity API ile cihazın meşru olduğunu doğrulayabiliyorsa, telefon numarasıyla oturum açma işlemi devam edebilir. Play Integrity API, sizin projenizde değil, Google'a ait bir projede Firebase Authentication tarafından etkinleştirildi. Bu, projenizdeki Play Integrity API kotalarına katkıda bulunmaz. Play Integrity Desteği , Kimlik Doğrulama SDK'sı v21.2.0+ (Firebase BoM v31.4.0+) ile mevcuttur.
Play Integrity'yi kullanmak için henüz uygulamanızın SHA-256 parmak izini belirtmediyseniz bunu Firebase konsolunun Proje ayarlarından yapın. Uygulamanızın SHA-256 parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimlik Doğrulaması bölümüne bakın.
- reCAPTCHA doğrulaması : Bir kullanıcının Google Play hizmetlerinin yüklü olmadığı bir cihaza sahip olması gibi Play Integrity'nin kullanılamadığı durumlarda Firebase Authentication, telefonla oturum açma akışını tamamlamak için bir reCAPTCHA doğrulaması kullanır. reCAPTCHA mücadelesi genellikle kullanıcının herhangi bir şeyi çözmesine gerek kalmadan tamamlanabilir. Bu akışın uygulamanızla bir SHA-1'in ilişkilendirilmesini gerektirdiğini unutmayın. Bu akış aynı zamanda API Anahtarınızın
PROJECT_ID .firebaseapp.com
için kısıtlanmamış olmasını veya izin verilenler listesine eklenmesini gerektirir.reCAPTCHA'nın tetiklendiği bazı senaryolar:
- Son kullanıcının cihazında Google Play hizmetleri yüklü değilse.
- Uygulama Google Play mağazası aracılığıyla dağıtılmıyorsa ( Kimlik Doğrulama SDK'sı v21.2.0+ üzerinde).
- Elde edilen SafetyNet jetonu geçerli değilse (Kimlik Doğrulama SDK'sı < v21.2.0 sürümlerinde).
Uygulama doğrulaması için SafetyNet veya Play Integrity kullanıldığında, SMS şablonundaki
%APP_NAME%
alanı Google Play mağazası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
kullanarak uygulama doğrulamasını (kurgusal 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. Böyle bir durumda kullanıcı
PROJECT_ID .firebaseapp.com/__/auth/handler
yedek URL'sine yönlendirilir. Firefox tarayıcılarında yerel uygulama bağlantılarının açılması varsayılan olarak devre dışıdır. Yukarıdaki hatayı Firefox'ta görüyorsanız, uygulama bağlantılarının açılmasını etkinleştirmek için Android için Firefox'u yerel uygulamalarda açacak şekilde ayarlama bölümündeki adımları izleyin.
Kullanıcının telefonuna doğrulama kodu gönderin
Telefon numarasıyla oturum açmayı başlatmak için kullanıcıya, telefon numarasını yazmasını isteyen bir arayüz sunun. Yasal gereklilikler farklılık gösterebilir ancak en iyi uygulama olarak ve kullanıcılarınız için beklentileri belirlemek amacıyla, telefonla oturum açmayı kullanmaları durumunda doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olacağını onlara bildirmelisiniz.
Ardından Firebase'in kullanıcının telefon numarasını doğrulamasını istemek için telefon numaralarını PhoneAuthProvider.verifyPhoneNumber
yöntemine iletin. Örneğin:
Kotlin+KTX
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ıkça ikinci bir SMS göndermez.
Kullanıcı oturum açmadan önce uygulamanız kapanırsa (örneğin, kullanıcı SMS uygulamasını kullanırken) telefon numarasıyla oturum açma işlemini sürdürmek için bu davranışı kullanabilirsiniz. verifyPhoneNumber
çağırdıktan sonra, doğrulamanın devam ettiğini gösteren bir bayrak ayarlayın. Ardından bayrağı Activity'nizin onSaveInstanceState
yöntemine kaydedin ve bayrağı onRestoreInstanceState
içine geri yükleyin. Son olarak, Faaliyetinizin onStart
yönteminde, doğrulamanın halihazırda devam edip etmediğini kontrol edin ve eğer öyleyse, verifyPhoneNumber
tekrar arayın. Doğrulama tamamlandığında veya başarısız olduğunda bayrağı temizlediğinizden emin olun (bkz. Doğrulama geri aramaları ).
Ekran döndürmeyi ve diğer Etkinlik yeniden başlatma örneklerini kolayca yönetmek için Etkinliğinizi verifyPhoneNumber
yöntemine iletin. Etkinlik durduğunda geri aramalar otomatik olarak ayrılacaktır, böylece geri arama yöntemlerine kullanıcı arayüzü 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 dilini belirleyerek de yerelleştirilebilir.
Kotlin+KTX
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
çağırdığınızda, isteğin sonuçlarını işleyen geri çağırma işlevlerinin uygulamalarını içeren OnVerificationStateChangedCallbacks
örneğini de sağlamanız gerekir. Örneğin:
Kotlin+KTX
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 aramaları
Çoğu uygulamada onVerificationCompleted
, onVerificationFailed
ve onCodeSent
geri çağrılarını uygularsınız. Uygulamanızın gereksinimlerine bağlı olarak onCodeAutoRetrievalTimeOut
da uygulayabilirsiniz.
onVerificationCompleted(PhoneAuthCredential)
Bu yöntem iki durumda çağrılır:
- Anında doğrulama: Bazı durumlarda telefon numarası, doğrulama kodu göndermeye veya girmeye gerek kalmadan anında doğrulanabilir.
- Otomatik alma: Bazı cihazlarda Google Play hizmetleri, gelen doğrulama SMS'ini otomatik olarak algılayabilir ve kullanıcı işlemi yapmadan doğrulama işlemini gerçekleştirebilir. (Bu özellik bazı operatörlerde mevcut olmayabilir.) Bu, SMS mesajının sonunda 11 karakterlik bir karma içeren SMS Alıcı API'sini kullanır.
PhoneAuthCredential
nesnesini kullanabilirsiniz.onVerificationFailed(FirebaseException)
Bu yöntem, geçersiz bir telefon numarası veya doğrulama kodunu belirten bir istek gibi geçersiz bir doğrulama isteğine yanıt olarak çağrılır.
onCodeSent(Dize doğrulamaKimliği, PhoneAuthProvider.ForceResendingToken)
İsteğe bağlı. Bu yöntem, doğrulama kodunun verilen telefon numarasına SMS ile gönderilmesinden 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örüntüler. (Aynı zamanda, otomatik doğrulama arka planda devam ediyor olabilir.) Ardından, kullanıcı doğrulama kodunu yazdıktan sonra, yönteme iletilen doğrulama kodunu ve doğrulama kimliğini kullanarak bir PhoneAuthCredential
nesnesi oluşturabilirsiniz. kullanıcıyı oturum açmak için de kullanabilirsiniz. Ancak bazı uygulamalar, doğrulama kodu kullanıcı arayüzünü görüntülemeden önce onCodeAutoRetrievalTimeOut
çağrılıncaya kadar bekleyebilir (önerilmez).
onCodeAutoRetrievalTimeOut(Dize doğrulama kimliği)
İsteğe bağlı. Bu yöntem, önce verifyPhoneNumber
tetiklemesi yapılmadan onVerificationCompleted
için belirtilen zaman aşımı süresi geçtikten sonra çağrılır. SIM kartı olmayan cihazlarda otomatik SMS alımı mümkün olmadığından bu yöntem hemen çağrılır.
Bazı uygulamalar, otomatik doğrulama süresi dolana kadar kullanıcı girişini engeller ve ancak bundan sonra kullanıcıdan SMS mesajından doğrulama kodunu yazmasını isteyen bir kullanıcı arayüzü görüntüler (önerilmez).
PhoneAuthCredential nesnesi oluşturma
Kullanıcı, Firebase'in kullanıcının telefonuna gönderdiği doğrulama kodunu girdikten sonra, onCodeSent
veya onCodeAutoRetrievalTimeOut
geri çağrısına iletilen doğrulama kodunu ve doğrulama kimliğini kullanarak bir PhoneAuthCredential
nesnesi oluşturun. ( onVerificationCompleted
çağrıldığında doğrudan bir PhoneAuthCredential
nesnesi alırsınız, böylece bu adımı atlayabilirsiniz.)
PhoneAuthCredential
nesnesini oluşturmak için PhoneAuthProvider.getCredential
çağırın:
Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Kullanıcının oturum açması
onVerificationCompleted
geri aramasında veya PhoneAuthProvider.getCredential
çağrılarak bir PhoneAuthCredential
nesnesi aldıktan sonra, PhoneAuthCredential
nesnesini FirebaseAuth.signInWithCredential
öğesine ileterek oturum açma akışını tamamlayın:
Kotlin+KTX
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 } } } }); }
Kurgusal telefon numaralarıyla test edin
Firebase konsolu aracılığıyla geliştirme için kurgusal telefon numaraları ayarlayabilirsiniz. Kurgusal telefon numaralarıyla test yapmak şu faydaları sağlar:
- 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.
- Kısıtlanmadan aynı telefon numarasıyla ardışık testler yapın. Bu, incelemeyi yapan kişinin test için aynı telefon numarasını kullanması durumunda App Store inceleme süreci sırasında reddedilme riskini en aza indirir.
- Google Play Hizmetleri olmadan bir iOS simülatöründe veya bir Android emülatöründe geliştirme yapma yeteneği gibi herhangi bir ek çabaya gerek kalmadan geliştirme ortamlarında kolayca test edin.
- Üretim ortamında gerçek telefon numaralarına normalde uygulanan güvenlik kontrolleri tarafından engellenmeden entegrasyon testleri yazın.
Kurgusal telefon numaraları şu gereksinimleri karşılamalıdır:
- Gerçekten kurgusal olan ve halihazırda mevcut olmayan telefon numaralarını kullandığınızdan emin olun. Firebase Kimlik Doğrulaması, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numaraları olarak ayarlamanıza izin vermez. Seçeneklerden biri, ABD test telefon numaraları olarak 555 ön ekli numarayı 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. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçecekler.
- Geliştirme için en fazla 10 telefon numarası ekleyebilirsiniz.
- Tahmin edilmesi zor olan test telefon numaralarını/kodlarını kullanın ve bunları sık sık değiştirin.
Kurgusal telefon numaraları ve doğrulama kodları oluşturun
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde, henüz yapmadıysanız Telefon sağlayıcısını etkinleştirin.
- Akordeon testi için Telefon numaraları 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 . İhtiyaç halinde ilgili satırın üzerine gelip çöp kutusu simgesine tıklayarak telefon numarasını ve kodunu silebilirsiniz.
Manuel test
Uygulamanızda doğrudan kurgusal bir telefon numarası kullanmaya başlayabilirsiniz. Bu, geliştirme aşamalarında kota sorunları veya kısıtlamalarla karşılaşmadan manuel test yapmanıza olanak tanır. Ayrıca Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen de test yapabilirsiniz.
Kurgusal telefon numarasını girip doğrulama kodunu gönderdiğinizde gerçek bir SMS gönderilmez. Bunun yerine, oturum açma işlemini 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 bir telefon numarası kullanıcısıyla aynı davranış ve özelliklere sahiptir ve Gerçek Zamanlı Veritabanı/Cloud Firestore ve diğer hizmetlere aynı şekilde erişebilir. Bu işlem sırasında basılan kimlik belirteci, gerçek bir telefon numarası kullanıcısı ile aynı imzaya sahiptir.
Diğer bir seçenek de, erişimi daha da kısıtlamak istiyorsanız bu kullanıcıları sahte kullanıcılar olarak ayırt etmek için bu kullanıcılar üzerinde özel talepler aracılığıyla bir test rolü ayarlamaktır .
ReCAPTCHA akışını test amacıyla manuel olarak tetiklemek forceRecaptchaFlowForTesting()
yöntemini kullanın.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Entegrasyon testi
Firebase Authentication, manuel teste ek olarak telefon kimlik doğrulama testi için entegrasyon testlerinin yazılmasına yardımcı olacak API'ler sağlar. Bu API'ler, web'de reCAPTCHA gereksinimini ve iOS'ta sessiz anında bildirimleri devre dışı bırakarak uygulama doğrulamasını devre dışı bırakır. Bu, bu akışlarda otomasyon testini mümkün kılar ve uygulanmasını kolaylaştırır. Ayrıca, Android'de anında doğrulama akışlarını test etme yeteneğinin sağlanmasına da yardımcı olurlar.
Android'de, signInWithPhoneNumber
çağrısından önce setAppVerificationDisabledForTesting()
çağırın. Bu, uygulama doğrulamasını otomatik olarak devre dışı bırakarak telefon numarasını manuel olarak çözmeden aktarmanıza olanak tanır. Play Integrity ve reCAPTCHA devre dışı bırakılmış olsa bile, gerçek bir telefon numarası kullanıldığında oturum açma işlemi yine de başarısız olacaktır. Bu API ile yalnızca kurgusal telefon numaraları kullanılabilir.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
kurgusal bir numarayla çağırmak, ilgili doğrulama kodunu sağlamanız gereken onCodeSent
geri aramasını tetikler. Bu, Android Emülatörlerinde test yapılmasına olanak tanır.
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+KTX
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)
Ek olarak, setAutoRetrievedSmsCodeForPhoneNumber
öğesini çağırarak otomatik alma için kurgusal numarayı ve buna karşılık gelen doğrulama kodunu ayarlayarak Android'deki otomatik alma akışlarını test edebilirsiniz.
verifyPhoneNumber
çağrıldığında, doğrudan PhoneAuthCredential
ile onVerificationCompleted
tetiklenir. Bu yalnızca kurgusal telefon numaralarıyla çalışır.
Uygulamanızı Google Play Store'da yayınlarken bunun devre dışı bırakıldığından ve uygulamanıza hiçbir kurgusal telefon numarasının sabit kodlanmadığı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+KTX
// 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
Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgileriyle (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) ilişkilendirilir. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.
Uygulamalarınızda kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Bkz . Kullanıcıları Yönetme .Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenliği Kurallarınızda , oturum açan kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve bunu, kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Bir kullanıcının oturumunu kapatmak için signOut
arayın:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();