Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Telefon Numarası kullanarak Android'de Firebase ile kimlik doğrulayın

Firebase Authentication'ı, kullanıcının telefonuna SMS mesajı göndererek bir kullanıcıyla oturum açmak için kullanabilirsiniz. Kullanıcı, SMS mesajında ​​bulunan tek seferlik bir kodu kullanarak oturum açar.

Uygulamanıza telefon numarasıyla oturum açma 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 akışlarını uygulayan bir açılır oturum açma widget'ı içeren FirebaseUI'yi 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

  1. Henüz yapmadıysanız, Android projenize Firebase'i ekleyin .
  2. Firebase Android BoM'yi kullanarak, modülünüzde (uygulama düzeyinde) Gradle dosyasında (genellikle app/build.gradle ) app/build.gradle Authentication Android kitaplığının bağımlılığını app/build.gradle .

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.6.0')
    
        // Declare 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 kütüphane bağımlılıklarını beyan

    Firebase BoM'yi kullanmamayı seçerseniz, bağımlılık satırında her bir Firebase kitaplık sürümünü belirtmeniz gerekir.

    Uygulamanızda birden çok Firebase kitaplığı kullanırsanız, kitaplık sürümlerini yönetmek için BoM'yi kullanmanızı önemle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    dependencies {
        // Declare 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:20.0.3'
    }
    

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.6.0')
    
        // Declare 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 kütüphane bağımlılıklarını beyan

    Firebase BoM'yi kullanmamayı seçerseniz, bağımlılık satırında her bir Firebase kitaplık sürümünü belirtmeniz gerekir.

    Uygulamanızda birden çok Firebase kitaplığı kullanırsanız, kitaplık sürümlerini yönetmek için BoM'yi kullanmanızı önemle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    dependencies {
        // Declare 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:20.0.3'
    }
    
  3. Uygulamanızı henüz Firebase projenize bağlamadıysanız, bunu Firebase konsolundan yapın .
  4. 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 için İstemcinizin Kimlik Doğrulamasına bakın.

Güvenlik endişeleri

Yalnızca bir telefon numarası kullanarak kimlik doğrulama, uygun olsa da, diğer mevcut yöntemlerden daha az güvenlidir, çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden çok kullanıcı profiline sahip 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 kullanıyorsanız, bunu daha güvenli oturum açma yöntemlerinin yanı sıra sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik ödünleri konusunda 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:

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. 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ğrulamalı çok yüksek sayıda kullanıcı oturum açmanız gerekiyorsa, fiyatlandırma planınızı yükseltmeniz gerekebilir. Fiyatlandırma sayfasına bakın.

Uygulama doğrulamayı etkinleştirin

Telefon numarası kimlik doğrulamasını kullanmak için Firebase, telefon numarası oturum açma isteklerinin uygulamanızdan geldiğini doğrulayabilmelidir. Firebase Authentication'ın bunu başarmasının iki yolu vardır:

  • SafetyNet : Bir kullanıcının Google Play Hizmetleri yüklü bir cihazı varsa ve Firebase Kimlik Doğrulaması, cihazı Android SafetyNet ile yasal olarak doğrulayabilirse, telefon numarasıyla oturum açma devam edebilir.
  • SafetyNet'i Firebase Authentication ile kullanmak üzere etkinleştirmek için:

    1. Google Cloud Console'da, projeniz için Android DeviceCheck API'yi etkinleştirin. Varsayılan Firebase API Anahtarı kullanılacak ve DeviceCheck API'ye erişmesine izin verilmesi gerekiyor.
    2. Henüz uygulamanızın SHA-256 parmak izini belirtmediyseniz, bunu Firebase konsolunun Ayarlar Sayfasından yapın . Uygulamanızın SHA-256 parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimlik Doğrulamasına bakın.
  • reCAPTCHA doğrulaması : Kullanıcının Google Play Hizmetleri desteğine sahip olmaması gibi SafetyNet'in kullanılamaması durumunda veya uygulamanızı bir emülatörde test ederken Firebase Authentication, telefonda oturum açma akışını tamamlamak için bir reCAPTCHA doğrulaması kullanır. ReCAPTCHA sorgulaması genellikle kullanıcının herhangi bir şeyi çözmesine gerek kalmadan tamamlanabilir. Lütfen bu akışın uygulamanızla bir SHA-1'in ilişkilendirilmesini gerektirdiğini unutmayın.

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ı yazmasını isteyen bir arayüz sunun. Yasal gereksinimler değişiklik gösterir, ancak en iyi uygulama ve kullanıcılarınızın beklentilerini belirlemek için, 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, PhoneAuthProvider.verifyPhoneNumber kullanıcının telefon numarasını doğrulamasını istemek için telefon numarasını PhoneAuthProvider.verifyPhoneNumber yöntemine PhoneAuthProvider.verifyPhoneNumber . Örneğin:

Java

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

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)

verifyPhoneNumber yöntemi verifyPhoneNumber : bir etkinliğin onStart yönteminde olduğu gibi, bunu birden çok kez onStart , verifyPhoneNumber yöntemi, orijinal istek zaman aşımına verifyPhoneNumber ikinci bir SMS göndermez.

Kullanıcı oturum açmadan önce uygulamanız kapanırsa (örneğin, kullanıcı SMS uygulamasını kullanırken) telefon numarası oturum açma sürecini devam ettirmek için bu davranışı kullanabilirsiniz. verifyPhoneNumber sonra, doğrulamanın devam ettiğini gösteren bir bayrak ayarlayın. Ardından, bayrağı Activity'inizin onSaveInstanceState yöntemine kaydedin ve onRestoreInstanceState bayrağı geri onRestoreInstanceState . Son olarak, Etkinliğinizin onStart yönteminde, doğrulamanın 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 Aktivite yeniden başlatmanın diğer örneklerini kolayca idare etmek için Aktivitenizi verifyPhoneNumber yöntemine verifyPhoneNumber . Geri çağırmalar, Etkinlik durduğunda otomatik olarak ayrılacaktır, böylece geri arama yöntemlerinde kullanıcı arabirimi geçiş kodunu özgürce yazabilirsiniz.

setLanguageCode tarafından gönderilen SMS mesajı, Auth örneğinizde setLanguageCode yöntemi aracılığıyla kimlik doğrulama dili belirlenerek de yerelleştirilebilir.

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin + KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

PhoneAuthProvider.verifyPhoneNumber aradığınızda, isteğin sonuçlarını işleyen geri arama işlevlerinin uygulamalarını içeren OnVerificationStateChangedCallbacks örneğini de sağlamanız gerekir. Örneğin:

Java

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(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(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
            // ...
        }

        // 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;

        // ...
    }
};

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
            // ...
        }

        // 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

        // ...
    }
}

Doğrulama geri aramaları

Çoğu uygulamada onVerificationCompleted , onVerificationFailed ve onCodeSent geri aramalarını onCodeSent . Ayrıca, uygulamanızın gereksinimlerine bağlı olarak onCodeAutoRetrievalTimeOut uygulayabilirsiniz.

onVerificationCompleted (PhoneAuthCredential)

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

  • Anında doğrulama: Bazı durumlarda, bir doğrulama kodu göndermeye veya girmeye gerek kalmadan telefon numarası 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.)
Her iki durumda da, kullanıcının telefon numarası başarıyla doğrulanmıştır ve kullanıcıda oturum açmak için geri PhoneAuthCredential iletilen 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ğrulamaId, PhoneAuthProvider.ForceResendingToken)

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

Bu yöntem çağrıldığında çoğu uygulama, kullanıcının SMS mesajından doğrulama kodunu yazmasını isteyen bir UI görüntüler. (Aynı zamanda, otomatik doğrulama arka planda devam ediyor olabilir.) Ardından, kullanıcı doğrulama kodunu yazdıktan sonra, bir PhoneAuthCredential nesnesi oluşturmak için yönteme iletilen doğrulama kodunu ve doğrulama kimliğini kullanabilirsiniz. kullanıcı oturumunu açmak için de kullanabilirsiniz. Ancak, bazı uygulamalar doğrulama kodu kullanıcı arabirimini görüntülemeden önce onCodeAutoRetrievalTimeOut çağrılana kadar onCodeAutoRetrievalTimeOut (önerilmez).

onCodeAutoRetrievalTimeOut (Dize doğrulama kimliği)

İsteğe bağlı. İçin belirtilen zaman aşımı süresi sonra bu yöntemi denir verifyPhoneNumber olmadan geçti onVerificationCompleted ilk tetikleme. SIM kartı olmayan cihazlarda bu yöntem hemen çağrılır çünkü otomatik SMS alımı mümkün değildir.

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

PhoneAuthCredential nesnesi oluşturun

Kullanıcı, PhoneAuthCredential kullanıcının telefonuna gönderdiği doğrulama kodunu girdikten sonra, doğrulama kodunu ve onCodeSent veya onCodeAutoRetrievalTimeOut geri onCodeSent iletilen doğrulama kimliğini kullanarak bir PhoneAuthCredential nesnesi oluşturun. ( onVerificationCompleted çağrıldığında, doğrudan bir PhoneAuthCredential nesnesi alırsınız, böylece bu adımı atlayabilirsiniz.)

PhoneAuthCredential nesnesini oluşturmak için PhoneAuthCredential PhoneAuthProvider.getCredential :

Java

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

Kotlin + KTX

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

Kullanıcıda oturum açın

Senden sonra bir olsun PhoneAuthCredential olsun, nesneyi onVerificationCompleted callback'inde veya arayarak PhoneAuthProvider.getCredential , geçirerek oturum açma akışı tamamlamak PhoneAuthCredential nesneyi FirebaseAuth.signInWithCredential :

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();
                        // ...
                    } 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
                        }
                    }
                }
            });
}

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
                    }
                }
            }
}

Kurgusal telefon numaralarıyla test edin

Firebase konsolu aracılığıyla geliştirme için hayali telefon numaraları ayarlayabilirsiniz. Hayali telefon numaralarıyla test etmek ş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ıtlanmadan aynı telefon numarasıyla art arda testler çalıştırın. Bu, yorumcunun test için aynı telefon numarasını kullanması durumunda App Store inceleme süreci sırasında 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 ek çaba harcamadan 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:

  1. Gerçekte kurgusal olan ve halihazırda 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, 555 önekli numarayı ABD test telefon numaraları olarak kullanmaktır, örneğin: +1 650-555-3434
  2. Telefon numaralarının uzunluk ve diğer kısıtlamalar açısından doğru biçimlendirilmesi gerekir. 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 zor olan 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

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. Oturum açma yöntemi sekmesinde, henüz yapmadıysanız Telefon sağlayıcısını etkinleştirin.
  3. Akordeon menüsünü test etmek için Telefon numaralarını açın.
  4. Test etmek istediğiniz telefon numarasını girin, örneğin: +1 650-555-3434 .
  5. Söz konusu numara için 6 basamaklı doğrulama kodunu sağlayın, örneğin: 654321 .
  6. Numarayı ekleyin . Bir ihtiyaç varsa, ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak telefon numarasını ve kodunu silebilirsiniz.

Manuel test

Uygulamanızda kurgusal bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu, 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üklenmeden doğrudan bir iOS simülatöründen veya Android emülatöründen de test edebilirsiniz.

Hayali telefon numarasını verdiğinizde ve doğrulama kodunu gönderdiğinizde, gerçek 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 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.

Diğer 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 .

forceRecaptchaFlowForTesting() akışını test için manuel olarak tetiklemek üzere forceRecaptchaFlowForTesting() yöntemini kullanın.

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

Entegrasyon testi

Firebase Authentication, manuel teste ek olarak, telefonla 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ğrulamayı devre dışı bırakır. Bu, bu akışlarda otomasyon testini mümkün kılar ve uygulamayı kolaylaştırır. Ek olarak, Android'de anında doğrulama akışlarını test etme yeteneği sağlamaya yardımcı olurlar.

Android'de, signInWithPhoneNumber çağrısından önce setAppVerificationDisabledForTesting() signInWithPhoneNumber çağırın. Bu, uygulama doğrulamasını otomatik olarak devre dışı bırakır ve telefon numarasını manuel olarak çözmeden iletmenize olanak tanır. ReCAPTCHA ve / veya SafetyNet devre dışı bırakılsa bile, gerçek bir telefon numarası kullanmanın oturum açmayı tamamlayamayacağını unutmayın. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.

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

verifyPhoneNumber kurgusal bir numarayla çağrılması, onCodeSent geri onCodeSent tetikler ve onCodeSent ilgili doğrulama kodunu sağlamanız gerekir. 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(String verificationId,
                                   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(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(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 çağırarak kurgusal numarayı 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ğrudan onVerificationCompleted ile PhoneAuthCredential tetikler. Bu yalnızca kurgusal telefon numaralarıyla çalışır.

Uygulamanızı Google Play mağazasında yayınlarken bunun devre dışı bırakıldığından ve uygulamanızda hiçbir hayali telefon numarasının 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(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 oturum açan kullanıcı 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 depolanı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. Kullanıcıları Yönetme konusuna bakın.

  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda , oturum auth kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak , kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz .

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

Java

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()