Telefon numarası kullanarak Android'de Firebase ile kimlik doğrulama

SMS mesajı göndererek bir kullanıcının oturumunu açmak için Firebase Authentication'ı kullanabilirsiniz kullanıcının telefonuna. Kullanıcı SMS mesajı.

Uygulamanıza telefon numarası ile oturum açma bilgisi eklemenin en kolay yolu FirebaseUI, telefon için oturum açma akışlarını uygulayan bir açılır oturum açma widget'ı içerir numarayla oturum açmanın yanı sıra şifre tabanlı ve birleşik oturum açma. Bu doküman , Firebase SDK'sını kullanarak telefon numarası oturum açma akışının nasıl uygulanacağını açıklar.

Başlamadan önce

  1. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
  2. Modül (uygulama düzeyinde) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Şunu kullanmanızı öneririz: Firebase Android BoM Kitaplık'ta sürüm oluşturmayı kontrol etmek için
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.2"))
    
        // 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'u kullanarak, Uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanacaktır.

    (Alternatif) BoM'u kullanmadan Firebase kitaplığı bağımlılıklarını ekleyin

    Firebase BoM'yi kullanmamayı tercih ederseniz her Firebase kitaplığı sürümünü belirtmeniz gerekir değerini alır.

    Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız, kitaplık sürümlerini yönetmek için BoM kullanmanızı öneririz. Böylece, uyumlu olur.

    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")
    }
    
    .
    'nı inceleyin. Kotlin'e özel bir kitaplık modülü mü arıyorsunuz? Başlamak için kalan süre: Ekim 2023 (Firebase BoM 32.5.0), hem Kotlin hem de Java geliştiricileri (ayrıntılar için bkz. bu girişimle ilgili SSS).
  3. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolunu kullanın.
  4. Firebase konsolunda uygulamanızın SHA-1 karmasını henüz ayarlamadıysanız lütfen unutmayın. Bkz. Uygulamanızın SHA-1'ini bulma hakkında bilgi edinmek için İstemcinizin Kimliğini Doğrulama karma değerini oluşturur.

Güvenlikle ilgili sorunlar

Yalnızca telefon numarası kullanarak kimlik doğrulama, kolay olsa da daha az güvenlidir diğer mevcut yöntemlerden farklıdır. Çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcısı olan cihazlarda SMS mesajı alabilen tüm kullanıcılar bir hesapta oturum açmak için cihazın telefon numarası.

Uygulamanızda telefon numarasına dayalı oturum açma özelliği kullanıyorsanız bunu sunmalısınız güvenli oturum açma yöntemlerine yer verir ve kullanıcıları, güvenliği olumlu sonuçlar doğurabilir.

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 Telefon Numarası oturum açma özelliğini etkinleştirmeniz gerekir yöntemi belirleyin:

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. Oturum Açma Yöntemi sayfasında Telefon Numarası'nı etkinleştirin oturum açma yöntemini kullanabilirsiniz.

Firebase'in telefon numarası oturum açma isteği kotası, çoğu uygulamanın etkilenmez. Ancak, çok sayıda kullanıcıyla oturum açmanız gerekiyorsa Telefonla kimlik doğrulama için fiyatlandırma planınızı yükseltmeniz gerekebilir. Görüntüleyin fiyatlandırma sayfası.

Uygulama doğrulamayı etkinleştirme

Telefon numarası kimlik doğrulamasını kullanmak için Firebase'in bunu doğrulayabilmesi gerekir telefon numarası oturum açma istekleri uygulamanızdan geliyor. RACI matrisindeki Firebase Authentication şu işlemleri 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, telefon numarasıyla oturum açma işlemine devam edebilirsiniz. Play Integrity API, Google'a ait bir projede şu kullanıcı tarafından etkinleştirildi: Firebase Authentication, projenizde kullanılamaz. Bu, Play Integrity API'ye katkıda bulunmaz . Play Integrity Desteği, Kimlik doğrulama SDK'sı v21.2.0+ (Firebase BoM 31.4.0 sürümü ve daha yeni bir sürüm).

    Play Integrity'yi kullanmak için uygulamanızın SHA-256 parmak izini henüz belirtmediyseniz şuradan Proje ayarlarını tıklayın. Referans İstemci bölümüne göz atın.

  • reCAPTCHA doğrulaması: Play Integrity'nin kullanılamaması durumunda Örneğin, 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ı çoğu zaman kullanıcının hiçbir şey çözmesine gerek kalmadan tamamlanır. Bu akışın Google Analytics 4'te Uygulamanızla bir SHA-1 ilişkilendirilmiştir. Bu akış için API Anahtarınızın da PROJECT_ID.firebaseapp.com için kısıtlanmamış veya izin verilenler listesine eklenmiş.

    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.

    ziyaret edin.
ziyaret edin. reCAPTCHA doğrulama akışını forceRecaptchaFlowForTesting Uygulama doğrulama özelliğini (kurmaca telefon numaraları kullanırken) şu adreslerle devre dışı bırakabilirsiniz: setAppVerificationDisabledForTesting.

Sorun giderme

  • "Başlangıç durumu eksik" uygulama doğrulama için reCAPTCHA kullanılırken hata oluştu

    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 şunu isteyen bir arayüz sunun: telefon numarasını yazmalarını istiyor. Yasal şartlar değişiklik gösterse de en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek amacıyla, kullandıkları cihazlarda doğrulama ve standart kullanım için bir SMS mesajı alabilirler. uygulanır.

Sonra da kendi telefon numarasını Firebase'i istemenin PhoneAuthProvider.verifyPhoneNumber yöntemi Kullanıcının telefon numarasını doğrulayın. Ö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 reentrant: yöntemi çağırırsanız Bir etkinliğin onStart yönteminde olduğu gibi verifyPhoneNumber yöntemi, orijinal istek zaman aşımına uğradı.

Hesabınız yoksa telefon numarasıyla oturum açma işlemine devam etmek için bu davranışı kullanabilirsiniz. Uygulama, kullanıcı oturum açmadan önce kapanır (örneğin, kullanıcı . verifyPhoneNumber adlı kişiyi çağırdıktan sonra, şu özelliklere sahip bir bayrak ayarlayın: doğrulamanın devam ettiğini belirtir. Ardından, bayrağı Etkinlik sayfanıza kaydedin onSaveInstanceState yöntemini çağırın ve işareti onRestoreInstanceState. Son olarak, onStart yöntemini kullanıyorsanız doğrulamanın devam edip etmediğini kontrol edin ve Bu durumda, verifyPhoneNumber numaralı telefonu tekrar arayın. Şu durumlarda işareti temizlediğinizden emin olun: doğrulama tamamlandığında veya başarısız olduğunda (bkz. Doğrulama geri aramaları).

Ekran döndürme ve Etkinlik yeniden başlatma işlemlerinin diğer örneklerini kolayca ele almak için Etkinliğinizi verifyPhoneNumber yöntemine iletin. Geri çağırma işlevleri Etkinlik durduğunda otomatik olarak ayrılır, böylece kullanıcı arayüzünü rahatça yazabilirsiniz geçiş kodunu kullanabilirsiniz.

Firebase tarafından gönderilen SMS mesajı da Yetkilendirme belgenizde setLanguageCode yöntemiyle kimlik doğrulama dili kullanır.

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 adlı kişiyi aradığınızda, şunları da yapmalısınız: OnVerificationStateChangedCallbacks örneği sağlar. şunun sonuçlarını işleyen geri çağırma işlevlerinin uygulamalarını içerir: talep ediyor. Örneğin:

Kotlin+KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")
        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        } else if (e is FirebaseAuthMissingActivityForRecaptchaException) {
            // reCAPTCHA verification attempted with null Activity
        }

        // Show a message and update the UI
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken,
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token
    }
}

Java

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(@NonNull FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) {
            // reCAPTCHA verification attempted with null Activity
        }

        // Show a message and update the UI
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;
    }
};

Doğrulama geri aramaları

Çoğu uygulamada onVerificationCompleted, onVerificationFailed ve onCodeSent geri arama. Siz bağlı olarak onCodeAutoRetrievalTimeOut uygulamasını da uygulayabilir ve istenen şartları karşılayıp karşılamadığını kontrol edin.

onDoğrulamaTamamlandı(PhoneAuthCredential)

Bu yöntem iki durumda çağrılır:

  • Anında doğrulama: Bazı durumlarda telefon numarası anında doğrulama kodu göndermenize veya girmenize gerek kalmadan doğrulanır.
  • Otomatik alma: Bazı cihazlarda Google Play Hizmetleri şunları yapabilir: gelen doğrulama SMS'ini otomatik olarak algıla ve gerçekleştir kullanıcı işlemi olmadan doğrulama. (Bu özellik kullanılamayabilir birlikte çalışır.) Bu, SMS Retriever API: SMS mesajının sonuna 11 karakterlik bir karma değeri ekler.
ziyaret edin. Her iki durumda da kullanıcının telefon numarası başarıyla doğrulanmıştır ve PhoneAuthCredential kullanıcının oturum açmak için geri çağırması gerekir.

onDoğrulamaFailed(FirebaseException)

Bu yöntem, geçersiz bir doğrulama isteğine yanıt olarak çağrılır: geçersiz bir telefon numarası veya doğrulama kodu belirten bir istek olarak değiştirebilir.

onCodeSent(Dize doğrulamakimliği, PhoneAuthProvider.ForceResendingToken)

İsteğe bağlı. Bu yöntem, doğrulama kodu gönderildikten sonra çağrılır verilen telefon numarasına SMS ile gönder.

Bu yöntem çağrıldığında çoğu uygulama, kullanıcının isteğine bağlı olarak SMS mesajındaki doğrulama kodunu yazın. (Aynı anda arka planda devam ediyor olabilir.) Ardından, kullanıcının doğrulama kodunu yazar, doğrulama kodunu ve oluşturmak için yönteme aktarılan doğrulama kimliğini Oturum açmak için de kullanabileceğiniz PhoneAuthCredential nesne gösterir. Ancak bazı uygulamalar onCodeAutoRetrievalTimeOut, görüntülemeden önce çağrılır doğrulama kodu kullanıcı arayüzü (önerilmez).

onCodeAutoRetrievalTimeOut(Dize doğrulamasıkimliği)

İsteğe bağlı. Bu yöntem, verifyPhoneNumber şu etkinliği kullanmadan geçti: İlk olarak onVerificationCompleted tetikleniyor. SIM'i olmayan cihazlarda kartlara dokunulduğunda bu yöntem hemen çağrılır, çünkü SMS otomatik alma özelliği yapmasını sağlar.

Bazı uygulamalar, otomatik doğrulama süresi zaman aşımına uğrayana kadar kullanıcı girişini engeller. Ardından, kullanıcıdan doğrulama kodunu girmesini isteyen bir kullanıcı arayüzü görüntüler. SMS mesajından (önerilmez).

PhoneAuthCredential nesnesi oluşturma

Kullanıcı Firebase'in kullanıcıya gönderdiği doğrulama kodunu girdikten sonra doğrulama işlemini kullanarak bir PhoneAuthCredential nesnesi oluşturun onCodeSent veya onCodeAutoRetrievalTimeOut geri arama. (Zaman onVerificationCompleted adlı kişiye telefon edilir. PhoneAuthCredential nesnesini doğrudan kapsayacağınız için bu adımı atlayabilirsiniz.)

PhoneAuthCredential nesnesini oluşturmak için şunu çağırın: PhoneAuthProvider.getCredential:

Kotlin+KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

Java

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

Kullanıcının oturumu açın

PhoneAuthCredential nesnesini aldıktan sonra, onVerificationCompleted geri arama veya telefonla arama PhoneAuthProvider.getCredential, oturum açma akışını şu tarihe kadar tamamlayın: PhoneAuthCredential nesnesini FirebaseAuth.signInWithCredential:

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 telefonla test etme sayılar şu faydaları sağlar:

  • Kullanım kotanızı tüketmeden telefon numarası kimlik doğrulamasını test edin.
  • Gerçek bir SMS mesajı göndermeden telefon numarası kimlik doğrulamasını test edin.
  • Kısıtlamadan, aynı telefon numarasıyla art arda testler yapın. Bu Uygulama mağazası inceleme sürecinde en az test için aynı telefon numarasını kullanın.
  • Örneğin, Google Play Hizmetleri olmadan iOS simülatöründe veya Android emülatöründe geliştirme yeteneği.
  • Entegrasyon testlerini, normalde uygulanan güvenlik kontrolleri tarafından engellenmeden yaz gerçek telefon numaraları için kullandığı bir teknolojidir.

Hayali telefon numaraları aşağıdaki şartları karşılamalıdır:

  1. 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
  2. Telefon numaralarının uzunlukları ve diğer özellikleri kısıtlar. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçerler.
  3. Geliştirme için en fazla 10 telefon numarası ekleyebilirsiniz.
  4. Tahmin edilmesi ve değiştirilmesi zor test telefon numaraları/kodları kullanın yapmanızı öneririm.

Hayali telefon numaraları ve doğrulama kodları oluşturma

  1. Firebase konsolunda Kimlik Doğrulama bölümüne bakın.
  2. Henüz yapmadıysanız Oturum açma yöntemi sekmesinde Telefon sağlayıcısını etkinleştirin.
  3. Test için telefon numaraları akordeon menüsünü açın.
  4. Test etmek istediğiniz telefon numarasını belirtin. Örneğin: +1 650-555-3434.
  5. Bu numara için 6 haneli doğrulama kodunu girin. Örneğin: 654321.
  6. Numarayı ekleyin. Gerekirse telefon numarasını silebilir ve fareyle ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak kodu.

Manuel test

Uygulamanızda hayali bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu şekilde şunları yapabilirsiniz: Geliştirme aşamalarında kota sorunları veya kısıtlamayla karşılaşmadan manuel testler gerçekleştirme. Google Play Hizmetleri olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen de test edebilirsiniz yüklendi.

Hayali telefon numarasını girip doğrulama kodunu gönderdiğinizde, gönderilir. Bunun yerine, imza işlemini tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir inç

Oturum açma işlemi tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. İlgili içeriği oluşturmak için kullanılan kullanıcı, gerçek bir telefon numarası kullanıcısıyla aynı davranışa ve özelliklere sahiptir; ve kullanıcı, Realtime Database/Cloud Firestore ve diğer hizmetler için aynı şekilde çalışır. sırasında basılan kimlik jetonu bu işlem gerçek bir telefon numarası kullanıcısıyla aynı imzaya sahiptir.

Diğer bir seçenek de, özel hak talepleriyle ilgili daha fazla kısıtlama uygulamak istiyorsanız erişim.

Test için reCAPTCHA akışını manuel olarak tetiklemek istiyorsanız forceRecaptchaFlowForTesting() yöntemini çağırın.

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

Entegrasyon testi

Firebase Authentication, manuel teste ek olarak entegrasyon testleri yazmaya yardımcı olan API'ler de sağlar telefon kimlik doğrulama testi için. Bu API'ler reCAPTCHA'yı devre dışı bırakarak uygulama doğrulamayı devre dışı bırakır. ve iOS'teki sessiz push bildirimlerinde kullanabilirsiniz. Bu sayede otomasyon testleri yapabilir ve uygulanması daha kolay olur. Ayrıca, anlık görüntü testi veya doğrulama akışı da mevcut.

Android'de şu saatten önce setAppVerificationDisabledForTesting() adlı kişiyi arayın: signInWithPhoneNumber sesli arama. Bu durumda uygulama doğrulama otomatik olarak devre dışı bırakılır. telefon numarasını manuel olarak çözmeden iletmenize olanak tanıyor. Her ne kadar Play Integrity ve reCAPTCHA devre dışıdır. Gerçek telefon numarası kullanıldığında da oturum açma işlemini tamamlayın. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

verifyPhoneNumber adlı işletmeye hayali bir numarayla çağrı yapmak şu işlemi tetikler: onCodeSent geri arama. Bu adımda ilgili doğrulamayı sağlamanız gerekir girin. 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, Android'de otomatik alma akışlarını test etmek için kurgusal sayıyı ve numaralı telefonu arayarak otomatik alma için ilgili doğrulama kodunun setAutoRetrievedSmsCodeForPhoneNumber

verifyPhoneNumber şu olduğunda: çağrıldığında, PhoneAuthCredential ile onVerificationCompleted tetikler. doğrudan ekleyebilirsiniz. Bu özellik yalnızca kurgusal telefon numaraları için kullanılabilir.

Bunun devre dışı bırakıldığından ve hayali telefon numaralarının gömülü olarak kodlanmadığından emin olun. uygulamanızı Google Play Store'da yayınlarken.

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

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.

  • Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: FirebaseUser nesnesini ifade eder. Bkz. Kullanıcıları Yönet.

  • Firebase Realtime Database ve Cloud Storage'ınızda Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz: auth değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.

Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın signOut:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();