Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Bir Telefon Numarası kullanarak Android'de Firebase ile kimlik doğrulaması yapın

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

En kolay yolu uygulaması kullanmaktır için oturum açma telefon numarası eklemek için FirebaseUI tarihinde eklendi oturum açma bir damla sunulmasını içerir, uygular oturum açma o akışları telefon numarası için oturum açma, hem de şifreyi tabanlı ve federe işareti -içinde. Bu belge, Firebase SDK kullanılarak bir telefon numarası oturum açma akışının nasıl uygulanacağını açıklar.

Sen başlamadan önce

  1. Eğer henüz yapmadıysanız, Android projeye Firebase ekleyin .
  2. Kullanılması Firebase Android Bom , senin modülü (uygulama düzeyinde) Gradle dosyası (genellikle Firebase Kimlik Android kütüphanesi için bağımlılık beyan app/build.gradle ).

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // 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'
    }
    

    Kullanarak Firebase Android Bom , uygulamanızın her zaman Firebase Android kütüphanelerin uyumlu versiyonlarını kullanacak.

    (Alternatif) Bom kullanmadan Firebase kütüphane bağımlılıklarını beyan

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

    Eğer uygulamanızda birden Firebase kitaplıkları kullanırsanız, biz çok tüm versiyonlar uyumlu olmasını sağlar kütüphane sürümlerini yönetmek için Bom kullanmanızı öneririz olduğunu unutmayın.

    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:21.0.1'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // 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'
    }
    

    Kullanarak Firebase Android Bom , uygulamanızın her zaman Firebase Android kütüphanelerin uyumlu versiyonlarını kullanacak.

    (Alternatif) Bom kullanmadan Firebase kütüphane bağımlılıklarını beyan

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

    Eğer uygulamanızda birden Firebase kitaplıkları kullanırsanız, biz çok tüm versiyonlar uyumlu olmasını sağlar kütüphane sürümlerini yönetmek için Bom kullanmanızı öneririz olduğunu unutmayın.

    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:21.0.1'
    }
    
  3. Henüz Firebase projesine uygulamanızı bağlı değil varsa, gelen bunu Firebase konsoluna .
  4. Zaten uygulamanızın SHA-1 karma ayarlamadıysanız Firebase konsoluna , bunu. Bkz Sizin Müşteri kimlik denetimi uygulamanızın SHA-1 karma bulma hakkında bilgi için.

Güvenlik endişeleri

Yalnızca bir telefon numarası kullanarak kimlik doğrulama, uygun olmakla birlikte, mevcut diğer yöntemlerden daha az güvenlidir, çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcı 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çmayı kullanıyorsanız, bunu daha güvenli oturum açma yöntemleriyle birlikte sunmalı ve kullanıcıları telefon numarasıyla oturum açmanın güvenlik değiş tokuşları hakkında bilgilendirmelisiniz.

Firebase projeniz için Telefon Numarası ile oturum açmayı etkinleştirin

Kullanıcılarda SMS ile oturum açmak için önce Firebase projeniz için Telefon Numarası ile oturum açma yöntemini etkinleştirmelisiniz:

  1. In Firebase konsoluna , Kimlik Doğrulama bölümünü açın.
  2. Yöntem Oturum Açma sayfasında, Telefon Numarası oturum açma yöntemine sağlar.

Firebase'in telefon numarası oturum açma isteği kotası, çoğu uygulamanın etkilenmeyeceği kadar yüksektir. Ancak, telefonla kimlik doğrulama ile çok yüksek sayıda kullanıcı oturum açmanız gerekiyorsa, fiyatlandırma planınızı yükseltmeniz gerekebilir. Bkz fiyatlandırma sayfasını.

Uygulama doğrulamasını etkinleştir

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

  • SafetyNet: Bir kullanıcı yüklü Google Play Hizmetleri ile bir cihaz vardır ve Firebase Kimlik ile meşru cihazı doğrulayabiliyorsanız Android SafetyNet , telefon numarası oturum açma ilerleyebilir.
  • SafetyNet'i Firebase Authentication ile kullanmak üzere etkinleştirmek için:

    1. Google Bulut konsolunda, etkinleştirmek Android DeviceCheck API projeniz için. Varsayılan Firebase API Anahtarı kullanılacak ve DeviceCheck API'sine erişmesine izin verilmesi gerekiyor.
    2. Henüz uygulamanızın SHA-256 parmak izi belirtilmemişse varsa, gelen bunu Ayarlar Sayfa Firebase konsolunun. Bakın Sizin Müşteri kimlik denetimi uygulamanızın SHA-256 parmak izi almak için ilgili ayrıntılar için.
  • reCAPTCHA doğrulama: SafetyNet Böyle bir kullanıcı bir emülatör üzerinde uygulamanızı test ederken Google Play Hizmetleri desteklemek ya sahip olmadığında olarak, kullanılamaz halinde, Firebase Doğrulama telefon oturum açma akışı tamamlamak için 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 ilişkilendirilmiş bir SHA-1 gerektirdiğini unutmayın.

Kullanıcının telefonuna bir doğrulama kodu gönderin

Telefon numarası ile oturum açmayı başlatmak için kullanıcıya telefon numarasını yazmasını isteyen bir arayüz sunun. Yasal gereksinimler değişiklik gösterir, ancak en iyi uygulama olarak 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.

Sonra, onların telefon numarasını geçmesi PhoneAuthProvider.verifyPhoneNumber Firebase kullanıcının telefon numarasını doğrulamak o isteğine yöntemle. Ö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 evreseldir: bunu böyle bir faaliyetin olduğu gibi birden çok kez, ararsanız onStart yöntemle, verifyPhoneNumber orijinal İstek zaman aşımına sürece yöntem ikinci SMS göndermez.

Uygulamanız kullanıcı oturum açmadan önce kapanırsa (örneğin, kullanıcı SMS uygulamasını kullanırken) telefon numarası oturum açma işlemini sürdürmek için bu davranışı kullanabilirsiniz. Aradığınızda sonra verifyPhoneNumber , doğrulama işlemi devam gösteren bir bayrak ayarlayın. Ardından, etkinlik'ın bayrağı kaydetmek onSaveInstanceState yöntem ve bayrağı geri onRestoreInstanceState . Son olarak, etkinlik'ın içinde onStart doğrulama zaten devam olup olmadığını yöntemle, çek, ve eğer öyleyse, çağrı verifyPhoneNumber tekrar. Doğrulama işlemi tamamlanır veya başarısız olduğunda bayrağı temizlemek için emin olun (bkz Doğrulama geri aramalar ).

Kolayca ekran döndürme ve Etkinlik yeniden diğer örneklerini işlemek için sizin Aktivite geçmesi verifyPhoneNumber yöntemiyle. Aktivite durduğunda geri aramalar otomatik olarak ayrılacaktır, böylece geri arama yöntemlerinde UI geçiş kodunu özgürce yazabilirsiniz.

Firebase tarafından gönderilen SMS mesajı da üzeri auth dilini belirterek lokalize edilebilir setLanguageCode sizin Auth örneğinde yöntemle.

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()

Aradığınızda PhoneAuthProvider.verifyPhoneNumber , ayrıca bir örneğini sağlamalıdır OnVerificationStateChangedCallbacks isteğinizin sonuçlarını ele geri arama fonksiyonlarının uygulamaları içerir. Ö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ı

En uygulamalarda, uygulamak onVerificationCompleted , onVerificationFailed ve onCodeSent geri aramalar. Ayrıca uygulamak belki onCodeAutoRetrievalTimeOut uygulamanızın gereksinimlerine bağlı olarak.

onVerificationCompleted(PhoneAuthCredential)

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

  • Anında doğrulama: Bazı durumlarda telefon numarası, bir doğrulama kodu göndermeye veya girmeye gerek kalmadan anında doğrulanabilir.
  • Otomatik alma: Bazı cihazlarda Google Play hizmetleri, gelen doğrulama SMS'lerini otomatik olarak algılayabilir ve kullanıcı işlemi yapmadan doğrulama gerçekleştirebilir. (Bu özellik bazı taşıyıcılar ile kullanılamayabilir.) Bu kullanır SMS Retriever API SMS mesajının sonunda 11 karakterlik özetini içerir.
Her iki durumda da, kullanıcının telefon numarası başarıyla doğrulandı, ve kullanabileceğiniz PhoneAuthCredential geri arama geçirilen nesne kullanıcıyla oturum .

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ğrulama kimliği, PhoneAuthProvider.ForceResendingToken)

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

Bu yöntem çağrıldığında çoğu uygulama, kullanıcıdan SMS mesajındaki doğrulama kodunu yazmasını isteyen bir kullanıcı arayüzü görüntüler. (Aynı zamanda, otomatik doğrulama arka işlem olabilir.) Daha sonra, kullanıcı tipleri sonra doğrulama kodu, doğrulama kodu ve oluşturma yöntemi geçildi onay kodunu kullanabilir PhoneAuthCredential nesnesi, burada sırayla kullanıcıyı oturum açmak için kullanabilirsiniz. Kadar Ancak bazı uygulamalar beklemek olabilir onCodeAutoRetrievalTimeOut doğrulama kodu UI görüntülemeden önce adlandırılır (önerilmez).

onCodeAutoRetrievalTimeOut(Dize doğrulamaId)

İ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, SMS otomatik alımı mümkün olmadığı için bu yöntem hemen çağrılır.

Bazı uygulamalar, otomatik doğrulama süresi dolana kadar kullanıcı girişini engeller ve ancak o zaman kullanıcıdan SMS mesajındaki doğrulama kodunu yazmasını isteyen bir UI görüntüler (önerilmez).

PhoneAuthCredential nesnesi oluşturun

Kullanıcı Firebase kullanıcının telefonuna gönderilen doğrulama kodunu girdikten sonra bir oluşturmak PhoneAuthCredential doğrulama kodu ve geçildi doğrulama kimliğini kullanarak, nesneyi onCodeSent veya onCodeAutoRetrievalTimeOut callback'inde. (Ne zaman onVerificationCompleted denir, bir olsun PhoneAuthCredential bu adımı atlayabilirsiniz böylece, doğrudan nesne.)

Oluşturmak için PhoneAuthCredential nesneyi, çağrı 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();
                        // 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
                        }
                    }
                }
            });
}

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

Kurgusal telefon numaralarıyla test edin

Firebase konsolu aracılığıyla geliştirme için kurgusal telefon numaraları ayarlayabilirsiniz. Kurgusal telefon numaralarıyla test yapmak şu avantajları sağlar:

  • Kullanım kotanızı tüketmeden telefon numarası doğrulamasını test edin.
  • Gerçek bir SMS mesajı göndermeden telefon numarası doğrulamasını test edin.
  • Kısıtlanmadan aynı telefon numarasıyla ardışık testler yapın. Bu, gözden geçirenin test için aynı telefon numarasını kullanması durumunda, App Store inceleme sürecinde reddedilme riskini en aza indirir.
  • Google Play Hizmetleri olmadan bir iOS simülatöründe veya bir Android öykünücüsünde geliştirme yeteneği gibi herhangi bir ek çaba harcamadan geliştirme ortamlarında kolayca test edin.
  • Bir üretim ortamında normal olarak 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çekten hayali 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. Örneğin, bir seçenek, ABD testi telefon numaraları gibi 555 öneki sayıları kullanmaktır: 1 650-555-3434
  2. Telefon numaralarının uzunluk ve diğer kısıtlamalar için doğru şekilde biçimlendirilmesi gerekir. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçecekler.
  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.

Kurgusal telefon numaraları ve doğrulama kodları oluşturun

  1. In Firebase konsoluna , Kimlik Doğrulama bölümünü açın.
  2. Eğer henüz yapmadıysanız yöntem sekmede Sign olarak, Telefon sağlayıcı sağlar.
  3. Akordiyon menü test etmek için Telefon numaralarını açın.
  4. Örneğin, testin istediğiniz telefon numarasını verin: 1 650-555-3434.
  5. Örneğin, bu belirli bir sayıda 6 haneli bir doğrulama kodu sağlar: 654321.
  6. Numara ekle. Gerekirse, ilgili satırın üzerine gelip çöp kutusu simgesine tıklayarak telefon numarasını ve kodunu silebilirsiniz.

Manuel test

Uygulamanızda doğrudan hayali bir telefon numarası kullanmaya başlayabilirsiniz. Bu, geliştirme aşamalarında kota sorunlarıyla veya kısıtlamalarla karşılaşmadan manuel test yapmanızı sağlar. Ayrıca, Google Play Hizmetleri yüklü olmadan doğrudan bir iOS simülatöründen veya Android öykünücüsünden de test edebilirsiniz.

Hayali telefon numarasını verip doğrulama kodunu gönderdiğinizde gerçek bir SMS gönderilmez. Bunun yerine, oturum açmayı tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir.

Oturum açma tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. Kullanıcı, gerçek bir telefon numarası kullanıcısı ile aynı davranışa ve özelliklere sahiptir ve Realtime Database/Cloud Firestore ve diğer hizmetlere aynı şekilde erişebilir. Bu işlem sırasında basılan kimlik belirteci, gerçek bir telefon numarası kullanıcısı ile aynı imzaya sahiptir.

Başka bir seçenek olan özel talepler yoluyla bir test rol set daha fazla erişimi kısıtlamak istiyorsanız bu kullanıcılar sahte kullanıcıları olarak ayırt etmek.

El reCAPTCHA'nın kullanımı, test etmek için akış tetiklemek için forceRecaptchaFlowForTesting() metodu.

// 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 sağlar. Bu API'ler, web'de reCAPTCHA gereksinimini ve iOS'ta sessiz anında iletme bildirimlerini devre dışı bırakarak uygulama doğrulamasını devre dışı bırakır. Bu, bu akışlarda otomasyon testini mümkün kılar ve uygulanmasını kolaylaştırır. Ayrıca, Android'de anında doğrulama akışlarını test etme yeteneği sağlamaya yardımcı olurlar.

Android'de, çağrı setAppVerificationDisabledForTesting() önce signInWithPhoneNumber çağrısı. Bu, uygulama doğrulamasını otomatik olarak devre dışı bırakarak 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ı kullanılmasının oturum açma işlemini tamamlamayacağını unutmayın. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.

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

Arayan verifyPhoneNumber kurgusal numarası ile tetikler onCodeSent karşılık gelen doğrulama kodunu sağlamanız gerekir ki geri arama. 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)

Ayrıca, hayali numarası ve arayarak otomatik geri alma için karşılık gelen doğrulama kodunu ayarlayarak Android'de otomatik alma akışlarını test edebilirsiniz setAutoRetrievedSmsCodeForPhoneNumber .

Ne zaman verifyPhoneNumber denir, bu tetikler onVerificationCompleted ile PhoneAuthCredential doğrudan. 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 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(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çtığı kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı bilgileri gibi kimlik bilgilerine 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 bir kullanıcıyı tanımlamak için kullanılabilir.

  • Senin uygulamalarda, gelen kullanıcının temel profil bilgileri alabilirsiniz FirebaseUser nesnesi. Bkz Kullanıcıları Yönetme .

  • Senin Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama yılında Güvenlik Kuralları , alabilirsiniz, kullanıcının benzersiz bir kullanıcı kimliği imzalı auth değişkeni ve hangi verilerin kullanıcı teneke erişimi kontrol etmek için kullanabilirsiniz.

Kullanıcıların birden çok kimlik doğrulama sağlayıcıları kullanarak uygulamada oturum izin verebilir mevcut bir kullanıcı hesabına auth sağlayıcı kimlik bilgilerini birbirine bağlayan.

Bir kullanıcı Oturumu kapatmak için çağrı signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()