Firebase Authentication'ı kullanarak kullanıcının telefonuna SMS mesajı göndererek kullanıcının oturumunu açabilirsiniz. Kullanıcı, SMS mesajında yer alan tek kullanımlık bir kodu kullanarak oturum açar.
Uygulamanıza telefon numarası ile oturum açma özelliği eklemenin en kolay yolu, telefon numarasıyla oturum açma için oturum açma akışlarının yanı sıra şifre tabanlı ve birleşik oturum açma özelliğini uygulayan bir açılır oturum açma widget'ı içeren FirebaseUI kullanmaktır. Bu belgede, Firebase SDK'sını kullanarak telefon numarası 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üzeyinde) Gradle dosyanıza
(genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Kitaplık sürümünü kontrol etmek için Firebase Android BoM'u kullanmanızı öneririz.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.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 kullanıldığında uygulamanız Firebase Android kitaplıklarının her zaman uyumlu sürümlerini kullanır.
(Alternatif) BoM'u kullanmadan Firebase kitaplığı bağımlılıklarını ekleme
Firebase BoM'yi kullanmamayı seçerseniz 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 BoM kullanmanızı önemle tavsiye ederiz. Böylece tüm sürümlerin uyumlu olması sağlanır.
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.0.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 karmasını bulma hakkında bilgi edinmek için İstemcinizi Kimlik Doğrulama başlıklı makaleyi inceleyin.
Güvenlikle ilgili sorunlar
Yalnızca telefon numarası kullanarak yapılan kimlik doğrulama işlemi pratik olan diğer yöntemlere göre daha az güvenlidir. Bunun nedeni, telefon numarasına sahip olma durumunun kullanıcılar arasında kolayca aktarılmasıdır. 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ı tabanlı 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ıyla oturum açmanın güvenlik açısından olumsuzlukları hakkında bilgilendirmelisiniz.
Firebase projeniz için Telefon Numarasıyla oturum açmayı etkinleştirme
Kullanıcıların SMS ile oturum açmasını sağlamak için önce Firebase projenizde 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 etkilenmeyecek kadar yüksek. Ancak telefonla kimlik doğrulamayla çok sayıda kullanıcının oturumunu açmanız gerekiyorsa fiyatlandırma planınızı yükseltmeniz gerekebilir. Fiyatlandırma sayfasını inceleyin.
Uygulama doğrulamayı etkinleştirme
Telefon numarası ile kimlik doğrulamayı kullanmak için Firebase'in, telefon numarası 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 Hizmetleri'nin 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çılabilir. Play Integrity API, sizin projenizde değil, Firebase Authentication tarafından Google'a ait bir projede etkinleştirilir. 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 kullanılabilir.
Play Integrity'yi kullanmak için uygulamanızın SHA-256 parmak izini henüz belirtmediyseniz Firebase konsolunun Proje ayarları bölümünden bunu 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ı: Play Integrity'nin kullanılamaması durumunda (ör. kullanıcının Google Play Hizmetleri yüklü olmayan bir cihazı olduğunda) Firebase Authentication, telefonda oturum açma akışını tamamlamak için reCAPTCHA doğrulaması kullanır. reCAPTCHA sorgulaması genellikle kullanıcının herhangi bir şey çözmesine gerek kalmadan tamamlanabilir. Bu akışın, uygulamanızla bir SHA-1'in ilişkilendirilmesini gerektirdiğini unutmayın. Bu akış, API anahtarınızın
PROJECT_ID.firebaseapp.com
için kısıtlanmamış veya izin verilenler listesine eklenmiş olmasını da 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 Store üzerinden dağıtılmıyorsa (Kimlik Doğrulama SDK'sı v21.2.0+ sürümünde).
- Elde edilen SafetyNet jetonu geçerli değilse (Kimlik Doğrulama SDK'sı 21.2.0'dan önceki sürümlerde).
Uygulama doğrulama için SafetyNet veya Play Integrity kullanıldığında SMS şablonundaki
%APP_NAME%
alanına Google Play Store'dan belirlenen uygulama adı girilir. reCAPTCHA'nın tetiklendiği senaryolarda%APP_NAME%
,PROJECT_ID.firebaseapp.com
olarak doldurulur.
forceRecaptchaFlowForTesting
ile zorunlu kılabilirsiniz.
setAppVerificationDisabledForTesting
kullanarak uygulama doğrulamayı (kurmaca telefon numaraları kullanırken) devre dışı bırakabilirsiniz.
Sorun giderme
Uygulama doğrulaması için reCAPTCHA kullanılırken "İlk durum eksik" hatası
Bu durum, reCAPTCHA akışı başarıyla tamamlandığında ancak kullanıcıyı tekrar yerel uygulamaya 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ı açmayı etkinleştirmek için Android için Firefox'u yerel uygulamalarda bağlantıları açacak şekilde ayarlama bölümündeki adımları uygulayın.
Kullanıcının telefonuna doğrulama kodu gönderme
Telefon numarasıyla oturum açmayı başlatmak için kullanıcıya telefon numarasını yazmasını isteyen bir arayüz sunun. Yasal şartlar değişiklik gösterir, ancak en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek amacıyla, telefonla oturum açmalarını kullandıkları takdirde doğrulama için bir SMS mesajı alabileceklerini ve standart ücretlerin geçerli olacağını 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. Örnek:
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 reentrant: Bir etkinliğin onStart
yönteminde olduğu gibi, birden fazla kez çağırırsanız orijinal istek zaman aşımına uğramadıkça verifyPhoneNumber
yöntemi ikinci bir SMS göndermez.
Uygulamanız kullanıcı oturum açmadan kapatılı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
numaralı telefonu çağırdıktan sonra doğrulamanın devam ettiğini
gösteren bir işaret ayarlayın. Ardından işareti, Etkinliğinizin onSaveInstanceState
yönteminde kaydedin ve onRestoreInstanceState
konumunda geri yükleyin. Son olarak, Etkinliğinizin onStart
yönteminde, doğrulama işleminin devam edip etmediğini kontrol edin. Devam ediyorsa verifyPhoneNumber
işlevini 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 Etkinlik yeniden başlatma gibi diğer durumları kolayca yönetmek için Etkinliğinizi verifyPhoneNumber
yöntemine iletin. Geri çağırma işlevleri Etkinlik durduğunda otomatik olarak çıkarılır. Böylece geri çağırma yöntemlerinde kullanıcı arayüzü geçiş kodunu serbestçe yazabilirsiniz.
Firebase tarafından gönderilen SMS mesajı, Auth örneğinizde setLanguageCode
yöntemi aracılığıyla kimlik doğrulama dilini belirterek 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ğı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. Örnek:
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ğırmalarını uygularsınız. Uygulamanızın gereksinimlerine bağlı olarak onCodeAutoRetrievalTimeOut
özelliğini de uygulayabilirsiniz.
onDoğrulamaTamamlandı(PhoneAuthCredential)
Bu yöntem iki durumda çağrılır:
- Anında doğrulama: Bazı durumlarda telefon numarası, doğrulama kodu gönderilmesine veya girilmesine gerek kalmadan anında doğrulanabilir.
- Otomatik alma: Bazı cihazlarda Google Play Hizmetleri, gelen doğrulama SMS'ini otomatik olarak algılayıp 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 Retriever API'yi kullanır.
PhoneAuthCredential
nesnesini kullanarak kullanıcıda oturum açabilirsiniz.
onDoğrulamaFailed(FirebaseException)
Bu yöntem, geçersiz telefon numarası veya doğrulama kodunun belirtildiği 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 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örüntüler. (Aynı zamanda, otomatik doğrulama arka planda devam ediyor olabilir.) Ardından, kullanıcı doğrulama kodunu girdikten sonra, doğrulama kodunu ve yönteme iletilen doğrulama kimliğini kullanarak PhoneAuthCredential
nesnesi oluşturabilirsiniz. Daha sonra bu nesneyi kullanıcının oturumu açmak için kullanabilirsiniz. Ancak bazı uygulamalar, doğrulama kodu kullanıcı arayüzünü görüntülemeden önce onCodeAutoRetrievalTimeOut
çağrılana kadar bekleyebilir (önerilmez).
onCodeAutoRetrievalTimeOut(Dize doğrulamasıkimliği)
İsteğe bağlı. Bu yöntem, önce onVerificationCompleted
tetiklemeden verifyPhoneNumber
için belirtilen zaman aşımı süresi geçtikten sonra çağrılır. SIM kartı olmayan cihazlarda, SMS otomatik alma özelliği mümkün olmadığından bu yöntem hemen çağrılır.
Bazı uygulamalar, otomatik doğrulama süresi zaman aşımına uğrayana kadar kullanıcı girişini engeller ve ancak bu sürenin sonunda 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 kullanıcının telefonuna gönderdiği doğrulama kodunu girdikten sonra, onCodeSent
veya onCodeAutoRetrievalTimeOut
geri çağırması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 oluşturulur, dolayısıyla bu adımı atlayabilirsiniz.)
PhoneAuthCredential
nesnesini oluşturmak için PhoneAuthProvider.getCredential
çağrısı yapın:
Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Kullanıcının oturumu açın
onVerificationCompleted
geri çağırmasında veya PhoneAuthProvider.getCredential
numarasını arayarak PhoneAuthCredential
nesnesini aldıktan sonra PhoneAuthCredential
nesnesini FirebaseAuth.signInWithCredential
adlı kullanıcıya 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 } } } }); }
Hayali telefon numaralarıyla test etme
Firebase konsolu üzerinden geliştirme için kurgusal 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.
- Kısıtlamadan, aynı telefon numarasıyla art arda testler yapın. Bu şekilde, incelemeci test için aynı telefon numarasını kullandığında uygulama mağazası inceleme sürecinde reddedilme riskini en aza indirir.
- iOS simülatöründe veya Google Play Hizmetleri olmadan bir Android emülatöründe geliştirme yapabilmek gibi ek çaba sarf etmeden geliştirme ortamlarında kolayca test edebilirsiniz.
- Entegrasyon testlerini, normalde üretim ortamında gerçek telefon numaralarına uygulanan güvenlik kontrolleri tarafından engellenmeden yazın.
Hayali telefon numaraları aşağıdaki şartları karşılamalıdır:
- Gerçekten hayali olan ve daha önce var 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. Seçeneklerden biri, ABD test telefon numaraları olarak 555 önekli 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 şekilde biçimlendirilmesi gerekir. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçerler.
- 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.
- Henüz yapmadıysanız Oturum açma yöntemi sekmesinde Telefon sağlayıcısını etkinleştirin.
- Test için telefon numaraları akordeon menüsünü açın.
- Test etmek istediğiniz telefon numarasını belirtin. Örneğin: +1 650-555-3434.
- Bu 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 hayali bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu sayede kota sorunları veya kısıtlamayla karşılaşmadan geliştirme aşamalarında manuel testler gerçekleştirebilirsiniz. Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatörü veya Android emülatörü üzerinden de test yapabilirsiniz.
Hayali telefon numarasını sağlayıp 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 Realtime Database/Cloud Firestore ile diğer hizmetlere aynı şekilde erişebilir. Bu işlem sırasında basılan kimlik jetonu, gerçek bir telefon numarası kullanıcısıyla aynı imzaya sahiptir.
Diğer bir seçenek de erişimi daha fazla kısıtlamak istiyorsanız bu kullanıcıları sahte kullanıcı olarak ayırt etmek için özel hak talepleri aracılığıyla bir test rolü belirlemektir.
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 teste ek olarak telefon kimlik doğrulama testi için entegrasyon testleri yazmaya yardımcı olacak API'ler de sağlar. Bu API'ler, iOS'te web ve sessiz push bildirimlerindeki reCAPTCHA şartını devre dışı bırakarak uygulama doğrulamayı devre dışı bırakır. Böylece bu akışlarda otomasyon testleri yapılabilir ve uygulanması kolaylaşır. Ayrıca, Android'de anında doğrulama akışlarını test etme imkanı sağlarlar.
Android'de signInWithPhoneNumber
aramasından önce setAppVerificationDisabledForTesting()
numaralı telefonu arayın. Bu yöntem, 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 bile, gerçek bir telefon numarası kullanıldığında oturum açma işlemi tamamlanamaz. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
numarasını hayali bir numarayla aramak onCodeSent
geri çağırmasını tetikler. Bu durumda ilgili doğrulama kodunu sağlamanız gerekir. Bu, Android Emülatörlerde 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)
Ayrıca setAutoRetrievedSmsCodeForPhoneNumber
numaralı telefonu arayıp 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, doğrudan PhoneAuthCredential
ile onVerificationCompleted
öğesini tetikler. Bu özellik yalnızca kurgusal telefon numaraları için kullanılabilir.
Uygulamanızı Google Play Store'da yayınlarken bu ayarın devre dışı bırakıldığından ve hayali telefon numaralarının uygulamanıza sabitlenmediğinden 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 (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgisi) 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önetme sayfasına göz atın. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan 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, 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
numaralı telefonu arayın:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();