Kullanıcının telefonuna SMS mesajı göndererek 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 özelliği eklemenin en kolay yolu, telefon numarasıyla oturum açmanın yanı sıra şifre tabanlı ve birleştirilmiş oturum açma için oturum açma akışlarını uygulayan bir oturum açma widget'ı içeren FirebaseUI'ı kullanmaktır. Bu dokümanda, Firebase SDK'sını kullanarak telefon numarasıyla 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ünüzün (uygulama düzeyinde) Gradle dosyasında (genellikle
<project>/<app-module>/build.gradle.ktsveya<project>/<app-module>/build.gradle) Android için Firebase Authentication kitaplığına olan bağımlılığı ekleyin. Kitaplık sürümünü kontrol etmek için Firebase Android BoM kullanmanızı öneririz.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.1.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 kullanarak uygulamanızın her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanmasını sağlayabilirsiniz.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıklarını ekleme
Firebase BoM kullanmamayı tercih ederseniz her Firebase kitaplığı sürümünü kendi 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 sayede tüm sürümlerin uyumlu olmasını sağlayabilirsiniz.
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:25.0.0") }
- Uygulamanızı Firebase projenize henüz bağlamadıysanız Firebase konsolundan bağlayın.
- Uygulamanızın SHA-1 karma değerini Firebase konsolunda henüz ayarlamadıysanız ayarlayın. Uygulamanızın SHA-1 karma değerini bulma hakkında bilgi için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
Güvenlik endişeleri
Yalnızca telefon numarasıyla kimlik doğrulama, kullanışlı olsa da diğer yöntemlere kıyasla daha az güvenlidir. Bunun nedeni, telefon numarası sahipliğinin kullanıcılar arasında kolayca aktarılabilmesidir. Ayrıca, birden fazla kullanıcı profili olan 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 yöntemini kullanıyorsanız bu yöntemi daha güvenli oturum açma yöntemleriyle birlikte sunmanız ve telefon numarasıyla oturum açmanın güvenlik açısından dezavantajları hakkında kullanıcıları bilgilendirmeniz gerekir.
Firebase projeniz için telefon numarasıyla oturum açma özelliğini etkinleştirme
Kullanıcıların SMS ile oturum açabilmesi için önce Firebase projenizde telefon numarasıyla oturum açma yöntemini etkinleştirmeniz gerekir:
- Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.
- Sign-in method (Oturum açma yöntemi) sekmesinde Phone (Telefon) oturum açma sağlayıcısını etkinleştirin.
-
SMS mesajlarının gönderilmesine izin vermek veya reddetmek istediğiniz bölgeler için bir politika belirleyin. SMS bölge politikası belirlemek, uygulamalarınızı SMS kötüye kullanımına karşı korumaya yardımcı olabilir. Yeni projeler için varsayılan politika hiçbir bölgeye izin vermez.
- Firebase konsolunda Güvenlik > Kimlik Doğrulama > Ayarlar sekmesine gidin.
- SMS bölge politikası bölümünde SMS bölge politikanızı oluşturun.
Uygulama doğrulamayı etkinleştirme
Telefon numarasıyla kimlik doğrulama özelliğini kullanmak için Firebase'in, telefon numarasıyla oturum açma isteklerinin uygulamanızdan geldiğini doğrulayabilmesi gerekir. Firebase Authentication bunu üç şekilde yapar:
- Play Integrity API: Kullanıcının cihazında Google Play services yüklüyse 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, Firebase Authentication tarafından Google'a ait bir projede etkinleştirildi. Bu, projenizdeki Play Integrity API kotalarına katkıda bulunmaz. Google Play Integrity desteği, Authentication SDK 21.2.0 sürümü veya üzeri (Firebase BoM 31.4.0 sürümü veya üzeri) ile kullanılabilir.
Play Integrity'yi kullanmak için henüz yapmadıysanız uygulamanızın SHA-256 parmak izini belirtin.
-
Firebase konsolunda
Ayarlar > Genel sekmesine gidin. - Uygulamalarınız kartına gidin, Android uygulamanızı seçin ve SHA sertifika parmak izleri alanına SHA-256 parmak izinizi ekleyin.
Uygulamanızın SHA parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
-
Firebase konsolunda
- reCAPTCHA doğrulaması: Play Integrity'nin kullanılamadığı durumlarda (ör. kullanıcının cihazında Google Play services yüklü değilse) Firebase Authentication, telefonla oturum açma akışını tamamlamak için reCAPTCHA doğrulaması kullanır. reCAPTCHA doğrulaması genellikle kullanıcının herhangi bir şey çözmesine gerek kalmadan tamamlanabilir. Bu akış için uygulamanızla ilişkilendirilmiş bir SHA-1 olması gerektiğini unutmayın. Bu akış için API anahtarınızın kısıtlanmamış olması veya
PROJECT_ID.firebaseapp.comiçin izin verilenler listesine eklenmiş 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 21.2.0 ve sonraki sürümlerde).
- Alınan SafetyNet jetonu geçerli değilse (Authentication SDK sürümlerinde < v21.2.0).
Uygulama doğrulaması için SafetyNet veya Play Integrity kullanıldığında SMS şablonundaki
%APP_NAME%alanı, Google Play Store tarafından belirlenen uygulama adıyla doldurulur. reCAPTCHA'nın tetiklendiği senaryolarda%APP_NAME%,PROJECT_ID.firebaseapp.comolarak doldurulur.
forceRecaptchaFlowForTesting
Uygulama doğrulamasını devre dışı bırakmak için (hayali telefon numaraları kullanırken)
setAppVerificationDisabledForTesting kullanabilirsiniz.
Sorun giderme
Uygulama doğrulama için reCAPTCHA kullanılırken "İlk durum 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ılarda, yerel uygulama bağlantılarının açılması varsayılan olarak devre dışıdır. Firefox'ta yukarıdaki hatayı görürseniz uygulama bağlantılarının açılmasını etkinleştirmek için Android için Firefox'u yerel uygulamalarda bağlantı açacak şekilde ayarlama başlıklı makaledeki adımları uygulayın.
Kullanıcının telefonuna doğrulama kodu gönderme
Telefon numarasıyla oturum açma işlemini başlatmak için kullanıcıya telefon numarasını yazmasını isteyen bir arayüz gösterin. Yasal koşullar değişiklik gösterir ancak en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek için, telefonla oturum açma özelliğini kullanmaları durumunda doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olduğunu onlara bildirmeniz gerekir.
Ardından, Firebase'in 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 girilebilir: Bir etkinliğin onStart yönteminde olduğu gibi birden çok kez çağırırsanız orijinal istek zaman aşımına uğramadığı sürece verifyPhoneNumber yöntemi ikinci bir SMS göndermez.
Uygulamanız, kullanıcı oturum açmadan önce kapanırsa (örneğin, kullanıcı SMS uygulamasını kullanırken) telefon numarasıyla oturum açma işlemini devam ettirmek için bu davranışı kullanabilirsiniz. verifyPhoneNumber yöntemini ç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 içinde geri yükleyin. Son olarak, etkinliğinizin onStart yönteminde doğrulamanın devam edip etmediğini kontrol edin ve devam ediyorsa verifyPhoneNumber yöntemini tekrar çağırın. Doğrulama tamamlandığında veya başarısız olduğunda işareti temizlediğinizden emin olun (
Doğrulama geri çağırmaları bölümüne bakın).
Ekran döndürme ve diğer Activity yeniden başlatma işlemlerini kolayca yönetmek için Activity'nizi verifyPhoneNumber yöntemine iletin. Etkinlik durduğunda geri çağırmalar otomatik olarak ayrılır. Bu sayede, geri çağırma yöntemlerinde kullanıcı arayüzü geçiş kodunu dilediğiniz gibi 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 yöntemini çağırdığınızda, 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 çağırmaları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 olmadan doğrulama yapabilir. (Bu özellik bazı operatörlerde kullanılamayabilir.) Bu yöntem, SMS mesajının sonunda 11 karakterlik bir karma değer içeren SMS Retriever API'yi kullanır.
PhoneAuthCredential nesnesini kullanarak kullanıcının oturum açmasını sağlayabilirsiniz.
onVerificationFailed(FirebaseException)
Bu yöntem, geçersiz bir doğrulama isteğine (ör. geçersiz bir telefon numarası veya doğrulama kodu belirten bir istek) 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. (Aynı zamanda 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 yönteminin çağrılmasını bekleyebilir (önerilmez).
onCodeAutoRetrievalTimeOut(String verificationId)
İsteğe bağlı. Bu yöntem, verifyPhoneNumber için belirtilen zaman aşımı süresi, onVerificationCompleted tetiklenmeden geçtikten sonra çağrılır. SIM kartı olmayan cihazlarda SMS otomatik alma işlemi 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 yalnızca bu sürenin ardından 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'in 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 aldığınız için bu adımı atlayabilirsiniz.)
PhoneAuthCredential nesnesini oluşturmak için PhoneAuthProvider.getCredential yöntemini çağırın:
Kotlin
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Kullanıcı oturumu açma
onVerificationCompleted geri çağırmada veya PhoneAuthProvider.getCredential yöntemini çağırarak bir PhoneAuthCredential nesnesi aldıktan sonra, PhoneAuthCredential nesnesini FirebaseAuth.signInWithCredential yöntemine 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 } } } }); }
Kurgusal telefon numaralarıyla test etme
Firebase konsolunu kullanarak geliştirme için kurgusal telefon numaraları oluşturabilirsiniz. Kurgusal telefon numaralarıyla test yapmak şu avantajları 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.
- Aynı telefon numarasıyla kısıtlama olmadan art arda testler çalıştırabilirsiniz. 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ülatöründe veya Android emülatöründe geliştirme yapabilme gibi ek bir çaba gerektirmeden geliştirme ortamlarında kolayca test edin.
- Üretim ortamında gerçek telefon numaralarına uygulanan güvenlik kontrolleri tarafından engellenmeden entegrasyon testleri yazın.
Kurgusal telefon numaraları şu koşulları karşılamalıdır:
- Kullandığınız telefon numaralarının gerçekten kurgusal olduğundan ve mevcut olmadığından emin olun. Firebase Authentication, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numarası olarak ayarlamanıza izin vermez. Seçeneklerden biri, ABD test telefon numaraları olarak 555 ön ekli numaraları kullanmaktır. Örneğin: +1 650-555-3434
- Telefon numaraları, uzunluk ve diğer kısıtlamalar açısından doğru şekilde biçimlendirilmelidir. Bu numaralar, gerçek bir kullanıcının telefon numarasıyla aynı doğrulama sürecinden geçer.
- 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.
Kurgusal telefon numaraları ve doğrulama kodları oluşturma
- Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.
- Henüz yapmadıysanız Oturum açma yöntemi sekmesinde Telefon oturum açma sağlayıcısını etkinleştirin.
- Test amaçlı telefon numaraları bölümünü genişletin.
-
Test etmek istediğiniz telefon numarasını girin. Örneğin:
+1 650-555-3434. -
Bu numara için 6 haneli doğrulama kodunu girin. Örneğin:
654321. - Her numara için Ekle'yi tıklayın. Gerekirse fareyle ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak telefon numarasını ve kodunu silebilirsiniz.
Manuel test
Uygulamanızda kurgusal bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu sayede, geliştirme aşamalarında kota sorunları veya kısıtlamalarla karşılaşmadan manuel testler yapabilirsiniz. Ayrıca, Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen test edebilirsiniz.
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 girmeniz 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. Realtime Database/Cloud Firestore ve diğer hizmetlere aynı şekilde erişebilir. Bu işlem sırasında oluşturulan kimlik jetonu, gerçek bir 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ü belirleyebilirsiniz.
Test için reCAPTCHA akışını manuel olarak tetiklemek istiyorsanız forceRecaptchaFlowForTesting() yöntemini kullanın.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Entegrasyon testi
Firebase Authentication, manuel testin yanı sıra telefonla kimlik doğrulama testi için entegrasyon testleri yazmaya yardımcı olan API'ler de sağlar. Bu API'ler, web'de reCAPTCHA şartını ve iOS'te sessiz push bildirimlerini devre dışı bırakarak uygulama doğrulamayı devre dışı bırakır. Bu sayede, bu akışlarda otomasyon testi yapılabilir ve daha kolay uygulanabilir. Ayrıca, Android'de anında doğrulama akışlarını test etme olanağı sunar.
Android'de signInWithPhoneNumber çağrısından önce setAppVerificationDisabledForTesting() çağrısı yapın. Bu işlem, uygulama doğrulamayı 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çma işlemi tamamlanamaz. Bu API ile yalnızca kurgusal telefon numaraları kullanılabilir.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber numarasını kurgusal bir numarayla aramak, onCodeSent geri aramasını tetikler. Bu geri 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, setAutoRetrievedSmsCodeForPhoneNumber yöntemini çağırarak otomatik alma için kurgusal numarayı ve ilgili doğrulama kodunu ayarlayarak Android'de otomatik alma akışlarını test edebilirsiniz.
verifyPhoneNumber çağrıldığında PhoneAuthCredential ile onVerificationCompleted doğrudan tetiklenir. Bu özellik yalnızca kurgusal telefon numaralarıyla çalışır.
Uygulamanızı Google Play Store'da yayınlarken bu özelliğin devre dışı bırakıldığından ve uygulamanızda kurgusal telefon numaraları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
// 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 (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
FirebaseUsernesnesinden alabilirsiniz. Kullanıcıları yönetme 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
authdeğ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 birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut yöntemini çağırın:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();