Kullanıcının telefonuna SMS mesajı göndererek kullanıcıların oturum açmasını sağlamak için Firebase Authentication simgesini kullanabilirsiniz. Kullanıcı, SMS mesajında yer alan tek seferlik 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, şifre tabanlı oturum açma ve birleştirilmiş oturum açma için oturum açma akışlarını uygulayan bir oturum açma widget'ı içeren FirebaseUI'yı kullanmaktır. Bu belgede, 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.kts
veya<project>/<app-module>/build.gradle
), Android için Firebase Authentication kitaplığının bağımlılığını ekleyin. Kitaplık sürüm oluşturmayı 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:34.0.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının daima uyumlu sürümlerini kullanır.
(Alternatif) Firebase kitaplığı bağımlılıklarını BoM kullanmadan ekleyin.
Firebase BoM kullanmamayı tercih ederseniz her Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM kullanmanızı önemle tavsiye ederiz. Bu sayede 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:24.0.0") }
- Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolundan yapın.
- Uygulamanızın SHA-1 karmasını henüz Firebase konsolunda ayarlamadıysanız ayarlayın. Uygulamanızın SHA-1 karmasını bulma hakkında bilgi edinmek için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
Güvenlikle ilgili endişeler
Yalnızca telefon numarasıyla kimlik doğrulama, kolaylık sağlasa 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 herhangi bir kullanıcı, 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ılara telefon numarasıyla oturum açmanın güvenlik açısından avantaj ve dezavantajları hakkında bilgi vermelisiniz.
Firebase projenizde telefon numarasıyla oturum açmayı etkinleştirme
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ı oturum açma yöntemini etkinleştirin.
Uygulama doğrulamayı etkinleştirme
Telefon numarasıyla kimlik doğrulamayı 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,
Firebase Authentication, Play Integrity API ile cihazın
meşruiyetini doğrulayabiliyorsa
telefon numarasıyla oturum açma işlemi devam edebilir. Play Integrity API, Firebase Authentication tarafından Google'a ait bir projede etkinleştirilmiş ancak sizin projenizde etkinleştirilmemiş. Bu, projenizdeki Play Integrity API kotalarına katkıda bulunmaz. Play Integrity Support,
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 uygulamanızın SHA-256 parmak izini henüz belirtmediyseniz Firebase konsolunun Proje ayarları bölümünden belirtin. Uygulamanızın SHA-256 parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
- reCAPTCHA doğrulaması: Play Integrity'nin kullanılamadığı durumlarda (ör. kullanıcının Google Play services'in yüklü olmadığı bir cihazı varsa) Firebase Authentication, telefonla oturum açma akışını tamamlamak için reCAPTCHA doğrulaması kullanır. reCAPTCHA doğrulama işlemi, kullanıcının herhangi bir şey çözmesine gerek kalmadan genellikle tamamlanabilir. Bu akışın, uygulamanızla bir SHA-1'in ilişkilendirilmesini gerektirdiğini unutmayın. Bu akışta, API anahtarınızın kısıtlanmamış olması veya
PROJECT_ID.firebaseapp.com
için izin verilenler listesinde yer alması da gerekir.reCAPTCHA'nın tetiklendiği bazı senaryolar:
- Son kullanıcının cihazında Google Play services yüklü değilse.
- Uygulama, Google Play Store üzerinden dağıtılmıyorsa (Authentication SDK v21.2.0 veya sonraki bir sürümünde).
- Elde edilen 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'den belirlenen uygulama adıyla doldurulur. reCAPTCHA'nın tetiklendiği senaryolarda%APP_NAME%
,PROJECT_ID.firebaseapp.com
olarak doldurulur.
forceRecaptchaFlowForTesting
ile reCAPTCHA doğrulama akışını zorlayabilirsiniz.
setAppVerificationDisabledForTesting
ile uygulama doğrulamasını (kurgusal telefon numaraları kullanırken) devre dışı bırakabilirsiniz.
Sorun giderme
Uygulama doğrulaması için reCAPTCHA kullanılırken "Missing initial state" (Başlangıç durumu 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üyorsanız uygulama bağlantılarının açılmasını etkinleştirmek için Firefox for Android'i bağlantıları yerel uygulamalarda 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çma işlemini başlatmak için kullanıcıya telefon numarasını yazmasını isteyen bir arayüz gösterin. Yasal şartlar farklılık gösterir ancak en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek için onlara telefonla oturum açma özelliğini kullanırlarsa doğrulama için SMS mesajı alabileceklerini ve standart ücretlerin geçerli olacağını bildirmeniz gerekir.
Ardından, kullanıcının telefon numarasının Firebase tarafından doğrulanmasını istemek için telefon numarasını PhoneAuthProvider.verifyPhoneNumber
yöntemine iletin. Örneğin:
Kotlin
val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks .build() PhoneAuthProvider.verifyPhoneNumber(options)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
verifyPhoneNumber
yöntemi yeniden giriş yapılabilir: Bu yöntemi birden çok kez çağırırsanız (ör. bir etkinliğin onStart
yönteminde), orijinal isteğin zaman aşımı gerçekleşmediği sürece verifyPhoneNumber
yöntemi ikinci bir SMS göndermez.
Uygulamanız, kullanıcı oturum açmadan önce kapanırsa (ör. kullanıcı SMS uygulamasını kullanırken) telefon numarasıyla oturum açma işlemine devam etmek için bu davranışı kullanabilirsiniz. verifyPhoneNumber
numarasını aradıktan sonra doğrulama işleminin devam ettiğini belirten bir işaret ayarlayın. Ardından, işareti Activity'nin onSaveInstanceState
yöntemine kaydedin ve onRestoreInstanceState
yönteminde geri yükleyin. Son olarak, Activity'nizin
onStart
yönteminde doğrulama işleminin zaten devam edip etmediğini kontrol edin. Devam ediyorsa verifyPhoneNumber
yöntemini tekrar çağırın. Doğrulama tamamlandığında veya başarısız olduğunda işareti kaldırdığınızdan emin olun (bkz.
Doğrulama geri aramaları).
Ekran döndürme ve Etkinlik'in yeniden başlatıldığı diğer durumları kolayca yönetmek için Etkinliğinizi verifyPhoneNumber
yöntemine iletin. Etkinlik durduğunda geri çağırmalar otomatik olarak ayrılacağından 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öntemiyle kimlik doğrulama dili belirtilerek de yerelleştirilebilir.
Kotlin
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
PhoneAuthProvider.verifyPhoneNumber
işlevini çağı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
de uygulayabilirsiniz.
onVerificationCompleted(PhoneAuthCredential)
Bu yöntem iki durumda çağrılır:
- Anında doğrulama: Bazı durumlarda, doğrulama kodu göndermeye veya girmeye gerek kalmadan telefon numarası anında doğrulanabilir.
- Otomatik alma: Google Play Hizmetleri, bazı cihazlarda gelen doğrulama SMS'ini otomatik olarak algılayabilir ve kullanıcı işlemi olmadan doğrulama gerçekleştirebilir. (Bu özellik bazı operatörlerde kullanılamayabilir.) Bu işlemde, SMS mesajının sonunda 11 karakterlik bir karma içeren SMS Retriever API kullanılır.
PhoneAuthCredential
nesnesini kullanabilirsiniz.
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 SMS ile sağlanan telefon numarasına 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 işlemi devam ediyor olabilir.) Ardından, kullanıcı doğrulama kodunu girdikten sonra, yönteme iletilen doğrulama kodu ve doğrulama kimliğini kullanarak bir PhoneAuthCredential
nesnesi oluşturabilirsiniz. Bu nesneyi de kullanıcıyı oturum açmak için kullanabilirsiniz. Ancak bazı uygulamalar, doğrulama kodu kullanıcı arayüzünü göstermeden önce onCodeAutoRetrievalTimeOut
ç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'in otomatik olarak alınması 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 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 telefonuna gönderdiği doğrulama kodunu girdikten sonra PhoneAuthCredential
nesnesi oluşturun. Bu nesneyi oluştururken doğrulama kodunu ve onCodeSent
veya onCodeAutoRetrievalTimeOut
geri çağırma işlevine iletilen doğrulama kimliğini kullanın. (onVerificationCompleted
çağrıldığında doğrudan bir PhoneAuthCredential
nesnesi alırsınız. Bu nedenle bu adımı atlayabilirsiniz.)
PhoneAuthCredential
nesnesini oluşturmak için PhoneAuthProvider.getCredential
işlevini çağırın:
Kotlin
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Kullanıcının oturumunu açma
PhoneAuthCredential
nesnesini onVerificationCompleted
geri çağırma işlevinde veya PhoneAuthProvider.getCredential
işlevini çağırarak aldıktan sonra, PhoneAuthCredential
nesnesini FirebaseAuth.signInWithCredential
işlevine 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 konsolu üzerinden geliştirme için kurgusal telefon numaraları ayarlayabilirsiniz. Kurgusal telefon numaralarıyla test yapmanın avantajları:
- 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, sınırlamaya tabi tutulmadan art arda testler çalıştırın. Bu, incelemecinin test için aynı telefon numarasını kullanması durumunda uygulama mağazası inceleme sürecinde reddedilme riskini en aza indirir.
- Geliştirme ortamlarında kolayca test yapın. Örneğin, Google Play Hizmetleri olmadan iOS simülatöründe veya Android emülatöründe geliştirme yapabilirsiniz.
- Normalde üretim ortamındaki gerçek telefon numaralarına uygulanan güvenlik kontrolleri tarafından engellenmeden entegrasyon testleri yazın.
Kurgusal telefon numaraları aşağıdaki koşulları karşılamalıdır:
- Gerçekten kurgusal olan ve daha önce kullanılmamış telefon numaraları kullandığınızdan emin olun. Firebase Authentication, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numarası olarak ayarlamanıza izin vermez. Bir seçenek olarak, ABD test telefon numaraları için 555 önekli numaraları kullanabilirsiniz. Ö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 ve değiştirilmesi zor olan 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 Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde, henüz yapmadıysanız Telefon sağlayıcıyı etkinleştirin.
- Test edilecek telefon numaraları açılır menüsünü açın.
- Test etmek istediğiniz telefon numarasını girin. Örneğin: +1 650-555-3434.
- İlgili numara için 6 haneli doğrulama kodunu girin. Örneğin: 654321.
- Numarayı ekleyin. Gerekirse ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak telefon numarasını ve kodunu silebilirsiniz.
Manuel test
Uygulamanızda doğrudan kurgusal bir telefon numarası kullanmaya başlayabilirsiniz. Bu sayede, geliştirme aşamalarında kota sorunları veya sıklık sınırlamasıyla karşılaşmadan manuel testler yapabilirsiniz. Ayrıca, Google Play Hizmetleri'nin yüklü olmadığı bir iOS simülatöründen veya Android emülatöründen de doğrudan 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 daha önce 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 oluşturulan kimlik jetonu, gerçek bir telefon numarası kullanıcısının imzası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 talepler aracılığıyla test rolü ayarlayabilirsiniz.
Test için reCAPTCHA akışını manuel olarak tetiklemek üzere 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ı olacak 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ğrulamasını devre dışı bırakır. Bu sayede, bu akışlarda otomasyon testi yapmak mümkün olur ve daha kolay uygulanır. Ayrıca, Android'de anında doğrulama akışlarını test etme olanağı sunar.
Android'de setAppVerificationDisabledForTesting()
numarasını signInWithPhoneNumber
görüşmesinden önce arayın. Bu işlem, uygulama doğrulamasını otomatik olarak devre dışı bırakır. Böylece, telefon numarasını manuel olarak çözmenize gerek kalmaz. Play Integrity ve reCAPTCHA devre dışı olsa bile gerçek bir telefon numarası kullanıldığında oturum açma işlemi tamamlanmaz. Bu API ile yalnızca kurgusal telefon numaraları kullanılabilir.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
numaralı telefonu kurgusal bir numarayla aradığınızda onCodeSent
geri arama işlemi tetiklenir. Bu işlemde, ilgili doğrulama kodunu girmeniz gerekir. 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
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
numarayı arayarak kurgusal numarayı ve buna karşılık gelen doğrulama kodunu otomatik alma için ayarlayarak Android'de otomatik alma akışlarını test edebilirsiniz.
verifyPhoneNumber
çağrıldığında onVerificationCompleted
, PhoneAuthCredential
ile 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ışı olduğundan ve uygulamanıza 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
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ı 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ığına bakılmaksızın 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 başlıklı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut
numaralı telefonu arayın:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();