Kullanıcının telefonuna bir SMS mesajı göndererek kullanıcının oturumunu açmak için Firebase Authentication'ı kullanabilirsiniz. Kullanıcı, SMS mesajında bulunan tek seferlik bir kodu kullanarak oturum açar.
Uygulamanıza telefon numarasıyla oturum açma özelliğini eklemenin en kolay yolu, telefon numarasıyla oturum açma için oturum açma akışlarının yanı sıra parola tabanlı ve birleştirilmiş oturumu uygulayan bir açılır oturum açma widget'ı içeren FirebaseUI kullanmaktır. -içinde. Bu belgede, Firebase SDK kullanılarak bir telefon numarası oturum açma akışının nasıl uygulanacağı açıklanmaktadır.
Sen başlamadan önce
- Henüz yapmadıysanız, Firebase'i Android projenize ekleyin .
- Modül (uygulama düzeyinde) Gradle dosyanızda (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
), Firebase Authentication için bağımlılığı ekleyin Android kitaplığı. Kitaplık sürüm oluşturmayı kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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-ktx") }
Firebase Android BoM'yi kullandığınızda, uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıkları ekleyin
Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden çok 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ı kesinlikle öneririz.
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-ktx:22.1.2") }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıkları ekleyin
Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden çok 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ı kesinlikle öneririz.
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.1.2") }
- Uygulamanızı henüz Firebase projenize bağlamadıysanız, bunu Firebase konsolundan yapın.
- Firebase konsolunda uygulamanızın SHA-1 hash'ini henüz ayarlamadıysanız bunu yapın. Uygulamanızın SHA-1 hash'ini bulma hakkında bilgi için Müşterinizin Kimliğini Doğrulama bölümüne bakın.
Güvenlik endişeleri
Yalnızca bir telefon numarası kullanarak kimlik doğrulaması uygun olmakla birlikte, mevcut diğer yöntemlerden daha az güvenlidir çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcı profili olan 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çmayı kullanmanın güvenlik ödünleşimleri hakkında bilgilendirmelisiniz.
Firebase projeniz için Telefon Numarası ile oturum açmayı etkinleştirin
Kullanıcılarda SMS ile oturum açmak için önce Firebase projeniz için Telefon Numarası 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.
Firebase'in telefon numarası 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ıyla oturum açmanız gerekiyorsa, fiyatlandırma planınızı yükseltmeniz gerekebilir. Fiyatlandırma sayfasına bakın.
Uygulama doğrulamasını etkinleştir
Telefon numarası kimlik doğrulamasını kullanmak için Firebase, uygulamanızdan telefon numarası oturum açma isteklerinin geldiğini doğrulayabilmelidir. Firebase Authentication'ın bunu gerçekleştirmesinin üç 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, projenizde değil, Firebase Authentication tarafından Google'a ait bir projede etkinleştirilmiştir. Bu, projenizdeki hiçbir Play Integrity API kotasına katkıda bulunmaz. Play Integrity Desteği , Kimlik Doğrulama SDK'sı v21.2.0+ (Firebase BoM v31.4.0+) ile sağlanır.
Play Integrity'yi kullanmak için uygulamanızın SHA-256 parmak izini henüz 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 Müşterinizin Kimliğini Doğrulama bölümüne bakın.
- reCAPTCHA doğrulaması : Bir kullanıcının Google Play hizmetleri yüklü olmayan bir cihaza sahip olması gibi Play Integrity'nin kullanılamaması durumunda Firebase Authentication, telefonda oturum açma akışını tamamlamak için bir reCAPTCHA doğrulaması kullanır. reCAPTCHA sorgulaması genellikle kullanıcının hiçbir şeyi çözmesine gerek kalmadan tamamlanabilir. Bu akışın, uygulamanızla ilişkilendirilmiş bir SHA-1 gerektirdiğini unutmayın. Bu akış aynı zamanda API Anahtarınızın
PROJECT_ID .firebaseapp.com
için kısıtlanmamış veya izin verilenler listesine alınmış olmasını da gerektirir.reCAPTCHA'nın tetiklendiği bazı senaryolar:
- Son kullanıcının cihazında yüklü Google Play hizmetleri yoksa.
- Uygulama, Google Play mağazası aracılığıyla dağıtılmamışsa ( Authentication SDK v21.2.0+' da).
- Elde edilen SafetyNet belirteci 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 zorlayabilirsinizsetAppVerificationDisabledForTesting
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 "Eksik başlangıç durumu" hatası
Bu, 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ı yedek URL
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 bölümündeki adımları izleyin.
Kullanıcının telefonuna bir doğrulama kodu gönderin
Telefon numarasıyla oturum açmayı başlatmak için, kullanıcıya telefon numaralarını yazmalarını isteyen bir arayüz sunun. Yasal gereksinimler değişebilir, ancak en iyi uygulama olarak ve kullanıcılarınız için beklentileri belirlemek amacıyla, telefonla oturum açmayı kullanırlarsa, doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olduğunu 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ğinonStart
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 uygulamanız kapanırsa (örneğin, kullanıcı SMS uygulamasını kullanırken) telefon numarası oturum açma işlemini sürdürmek için bu davranışı kullanabilirsiniz.
verifyPhoneNumber
öğesini aradıktan sonra, doğrulamanın devam ettiğini gösteren bir bayrak ayarlayın. Ardından, Activity'nizinonSaveInstanceState
yöntemindeki bayrağı kaydedin veonRestoreInstanceState
içindeki bayrağı geri yükleyin. Son olarak, Activity'nizinonStart
yönteminde, doğrulamanın halihazırda devam edip etmediğini kontrol edin ve ö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 Activity yeniden başlatma örneklerini kolayca işlemek için Activity'nizi
verifyPhoneNumber
yöntemine iletin. Etkinlik durduğunda geri aramalar otomatik olarak ayrılacaktır, böylece geri arama yöntemlerinde UI geçiş kodunu özgürce yazabilirsiniz.Firebase tarafından gönderilen SMS mesajı, Auth örneğinizde
setLanguageCode
yöntemi aracılığıyla auth dili belirtilerek 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, ayrıca isteğin sonuçlarını işleyen geri arama işlevlerinin uygulamalarını içeren birOnVerificationStateChangedCallbacks
örneği sağlamalısınız. Ö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
veonCodeSent
geri aramalarını uygularsınız. Uygulamanızın gereksinimlerine bağlı olarakonCodeAutoRetrievalTimeOut
da uygulayabilirsiniz.onVerificationCompleted(PhoneAuthCredential)
Bu yöntem iki durumda çağrılır:
- Anında doğrulama: Bazı durumlarda telefon numarası, bir 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 gerçekleştirebilir. (Bu özellik bazı operatörlerde kullanılamayabilir.) 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 kodu 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, verilen telefon numarasına SMS ile doğrulama kodu 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örüntüler. (Aynı zamanda otomatik doğrulama arka planda 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. sırayla kullanıcıyı oturum açmak için kullanabilirsiniz. Ancak bazı uygulamalar, doğrulama kodu kullanıcı arayüzünü görüntülemeden önceonCodeAutoRetrievalTimeOut
çağrılana kadar bekleyebilir (önerilmez).onCodeAutoRetrievalTimeOut(Dize doğrulamaKimliği)
İsteğe bağlı. Bu yöntem, ilk olarak
onVerificationCompleted
tetiklemesi yapılmadanverifyPhoneNumber
için belirtilen zaman aşımı süresinin geçmesinden 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ındaki doğrulama kodunu yazmasını isteyen bir kullanıcı arayüzü görüntüler (önerilmez).
Bir PhoneAuthCredential nesnesi oluşturun
Kullanıcı, Firebase'in kullanıcının telefonuna gönderdiği doğrulama kodunu girdikten sonra, doğrulama kodunu ve
onCodeSent
veyaonCodeAutoRetrievalTimeOut
geri aramasına iletilen doğrulama kimliğini kullanarak birPhoneAuthCredential
nesnesi oluşturun. (onVerificationCompleted
çağrıldığında, doğrudan birPhoneAuthCredential
nesnesi alırsınız, böylece bu adımı atlayabilirsiniz.)PhoneAuthCredential
nesnesini oluşturmak içinPhoneAuthProvider.getCredential
arayın:Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
kullanıcı oturumu aç
onVerificationCompleted
geri aramasında veyaPhoneAuthProvider.getCredential
çağırarak birPhoneAuthCredential
nesnesi aldıktan sonra,PhoneAuthCredential
nesnesiniFirebaseAuth.signInWithCredential
öğesine geçirerek 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 } } } }); }
Hayali telefon numaralarıyla test edin
Firebase konsolu aracılığıyla geliştirme için hayali telefon numaraları ayarlayabilirsiniz. Hayali 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.
- Sıkılmadan aynı telefon numarasıyla ardışık testler yapın. Bu, gözden geçiren kişinin test için aynı telefon numarasını kullanması durumunda App Store inceleme sürecinde reddedilme riskini en aza indirir.
- Google Play Hizmetleri olmadan bir iOS simülatöründe veya bir Android öykünücüsünde geliştirme yeteneği gibi herhangi bir ek çaba gerektirmeden geliştirme ortamlarında kolayca test edin.
- Bir üretim ortamında normalde gerçek telefon numaralarına uygulanan güvenlik kontrolleri tarafından engellenmeden entegrasyon testleri yazın.
Kurgusal telefon numaraları şu gereksinimleri karşılamalıdır:
- Gerçekte kurgusal olan ve zaten var olmayan telefon numaralarını 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 ekli numara kullanmaktır, örneğin: +1 650-555-3434
- Telefon numaraları, uzunluk ve diğer kısıtlamalar için doğru şekilde biçimlendirilmelidir. 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 etmesi zor test telefon numaralarını/kodlarını kullanın ve bunları sık sık değiştirin.
Hayali telefon numaraları ve doğrulama kodları oluşturun
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Henüz yapmadıysanız Oturum açma yöntemi sekmesinde 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 .
- Belirli bir numara için 6 haneli doğrulama kodunu girin, örneğin: 654321 .
- Numarayı ekleyin . İhtiyaç halinde ilgili satırın üzerine gelip çöp kutusu ikonuna tıklayarak telefon numarasını ve kodunu silebilirsiniz.
Manuel test
Uygulamanızda hayali bir telefon numarası kullanmaya hemen başlayabilirsiniz. Bu, geliştirme aşamalarında kota sorunları veya kısıtlamalarla karşılaşmadan manuel test gerçekleştirmenize olanak tanır. Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatöründen veya Android öykünücüsünden de test edebilirsiniz.
Hayali telefon numarasını girip doğrulama kodunu gönderdiğinizde gerçek bir SMS gönderilmez. Bunun yerine, oturum açmayı tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir.
Oturum açma tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. Kullanıcı, gerçek bir telefon numarası kullanıcısı ile aynı davranış ve özelliklere sahiptir ve Realtime Database/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.
Başka bir seçenek de, erişimi daha fazla kısıtlamak istiyorsanız, bu kullanıcıları sahte kullanıcılar olarak ayırt etmek için özel talepler aracılığıyla bir test rolü belirlemektir .
Test amacıyla reCAPTCHA akışını manuel olarak tetiklemek için
forceRecaptchaFlowForTesting()
yöntemini kullanın.// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Entegrasyon testi
Manuel teste ek olarak Firebase Authentication, telefon kimlik doğrulama testi için entegrasyon testleri yazmaya yardımcı olacak API'ler sağlar. Bu API'ler, web'de reCAPTCHA gereksinimini ve iOS'ta sessiz push bildirimlerini 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 olanağı sağlamaya yardımcı olurlar.
Android'de,
signInWithPhoneNumber
çağrısından öncesetAppVerificationDisabledForTesting()
çağırın. Bu, uygulama doğrulamasını otomatik olarak devre dışı bırakarak telefon numarasını manuel olarak çözmeden iletmenize olanak tanır. Play Integrity ve reCAPTCHA devre dışı bırakılsa da, 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 hayali telefon numaraları kullanılabilir.// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
hayali bir numarayla çağırmak, karşılık gelen doğrulama kodunu sağlamanız gerekenonCodeSent
geri aramasını tetikler. Bu, Android Emülatörlerinde test yapılmasına izin verir.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 kurgusal sayıyı ve otomatik alma için ilgili doğrulama kodunu ayarlayarak Android'de otomatik alma akışlarını test edebilirsiniz.verifyPhoneNumber
çağrıldığında, doğrudanPhoneAuthCredential
ileonVerificationCompleted
tetikler. Bu yalnızca hayali 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 hayali 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 bilgilerine (yani, kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak saklanı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önetin .Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenlik Kurallarınızda , oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve bunu, bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
öğesini arayın:Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();
Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı altında ve kod örnekleri Apache 2.0 Lisansı altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2023-10-02 UTC.
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"İhtiyacım olan bilgiler yok" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Çok karmaşık / çok fazla adım var" },{ "type": "thumb-down", "id": "outOfDate", "label":"Güncel değil" },{ "type": "thumb-down", "id": "translationIssue", "label":"Çeviri sorunu" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Örnek veya kod sorunu" },{ "type": "thumb-down", "id": "otherDown", "label":"Diğer" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Anlaması kolay" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Sorunumu çözdü" },{ "type": "thumb-up", "id": "otherUp", "label":"Diğer" }]