Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Otentikasi dengan Firebase di Android menggunakan Nomor Telepon

Anda dapat menggunakan Firebase Authentication untuk membuat pengguna login dengan mengirimkan pesan SMS ke ponsel pengguna. Pengguna masuk menggunakan kode satu kali yang terdapat dalam pesan SMS.

Cara termudah untuk menambahkan login dengan nomor telepon ke aplikasi Anda adalah dengan menggunakan FirebaseUI , yang menyertakan widget login drop-in yang menerapkan alur login untuk login dengan nomor telepon, serta login berbasis sandi dan gabungan -di. Dokumen ini menjelaskan cara menerapkan alur masuk dengan nomor telepon menggunakan SDK Firebase.

Sebelum kamu memulai

  1. Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda .
  2. Dalam file Gradle modul (tingkat aplikasi) Anda (biasanya <project>/<app-module>/build.gradle ), tambahkan dependensi untuk library Android Firebase Authentication. Sebaiknya gunakan Firebase Android BoM untuk mengontrol pembuatan versi library.

    Java

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

    Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi library Firebase Android yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.

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

    Kotlin+KTX

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

    Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi library Firebase Android yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.

    Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.

    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-ktx:21.1.0'
    }
    
  3. Jika Anda belum menghubungkan aplikasi ke proyek Firebase, lakukan dari Firebase console .
  4. Jika Anda belum menyetel hash SHA-1 aplikasi Anda di Firebase console , lakukanlah. Lihat Mengautentikasi Klien Anda untuk informasi tentang menemukan hash SHA-1 aplikasi Anda.

Perhatian pada keamanan

Otentikasi hanya menggunakan nomor telepon, meskipun nyaman, kurang aman dibandingkan metode lain yang tersedia, karena kepemilikan nomor telepon dapat dengan mudah ditransfer antar pengguna. Selain itu, pada perangkat dengan beberapa profil pengguna, setiap pengguna yang dapat menerima pesan SMS dapat masuk ke akun menggunakan nomor telepon perangkat.

Jika Anda menggunakan proses masuk berbasis nomor telepon di aplikasi Anda, Anda harus menawarkannya bersama dengan metode masuk yang lebih aman, dan memberi tahu pengguna tentang pengorbanan keamanan menggunakan masuk dengan nomor telepon.

Aktifkan masuk dengan Nomor Telepon untuk proyek Firebase Anda

Untuk membuat pengguna masuk melalui SMS, Anda harus terlebih dahulu mengaktifkan metode masuk dengan Nomor Telepon untuk proyek Firebase Anda:

  1. Di Firebase console , buka bagian Otentikasi .
  2. Pada halaman Metode Masuk , aktifkan metode masuk Nomor Telepon .

Kuota permintaan masuk nomor telepon Firebase cukup tinggi sehingga sebagian besar aplikasi tidak akan terpengaruh. Namun, jika Anda perlu masuk dengan volume pengguna yang sangat tinggi dengan autentikasi telepon, Anda mungkin perlu meningkatkan paket harga Anda. Lihat halaman harga .

Aktifkan verifikasi aplikasi

Untuk menggunakan autentikasi nomor telepon, Firebase harus dapat memverifikasi bahwa permintaan masuk dengan nomor telepon berasal dari aplikasi Anda. Ada dua cara Firebase Authentication menyelesaikan ini:

  • SafetyNet : Jika pengguna memasang perangkat dengan Layanan Google Play, dan Firebase Authentication dapat memverifikasi perangkat sebagai perangkat yang sah dengan Android SafetyNet , masuk dengan nomor telepon dapat dilanjutkan.
  • Untuk mengaktifkan SafetyNet untuk digunakan dengan Firebase Authentication:

    1. Di Google Cloud Console, aktifkan Android DeviceCheck API untuk proyek Anda. Kunci API Firebase default akan digunakan, dan harus diizinkan untuk mengakses API DeviceCheck.
    2. Jika Anda belum menentukan sidik jari SHA-256 aplikasi Anda, lakukan dari Halaman Pengaturan konsol Firebase. Lihat Mengautentikasi Klien Anda untuk detail tentang cara mendapatkan sidik jari SHA-256 aplikasi Anda.
  • verifikasi reCAPTCHA : Jika SafetyNet tidak dapat digunakan, seperti saat pengguna tidak memiliki dukungan Layanan Google Play, atau saat menguji aplikasi Anda di emulator, Firebase Authentication menggunakan verifikasi reCAPTCHA untuk menyelesaikan alur masuk melalui ponsel. Tantangan reCAPTCHA seringkali dapat diselesaikan tanpa pengguna harus menyelesaikan apa pun. Harap perhatikan bahwa alur ini mengharuskan SHA-1 dikaitkan dengan aplikasi Anda. Alur ini juga mengharuskan Kunci API Anda tidak dibatasi atau diizinkan untuk "${PROJECT_NAME}.firebaseapp.com".

Kirim kode verifikasi ke ponsel pengguna

Untuk memulai proses masuk dengan nomor telepon, tunjukkan kepada pengguna antarmuka yang meminta mereka untuk mengetikkan nomor telepon mereka. Persyaratan hukum berbeda-beda, tetapi sebagai praktik terbaik dan untuk menetapkan harapan bagi pengguna Anda, Anda harus memberi tahu mereka bahwa jika mereka menggunakan login melalui telepon, mereka mungkin menerima pesan SMS untuk verifikasi dan tarif standar berlaku.

Kemudian, berikan nomor telepon mereka ke metode PhoneAuthProvider.verifyPhoneNumber untuk meminta Firebase memverifikasi nomor telepon pengguna. Sebagai contoh:

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)

Metode verifikasiPhoneNumber masuk kembali: jika Anda memanggilnya beberapa kali, seperti dalam metode verifyPhoneNumber verifyPhoneNumber , metode onStart tidak akan mengirim SMS kedua kecuali waktu permintaan awal telah habis.

Anda dapat menggunakan perilaku ini untuk melanjutkan proses masuk dengan nomor telepon jika aplikasi Anda ditutup sebelum pengguna dapat masuk (misalnya, saat pengguna menggunakan aplikasi SMS). Setelah Anda memanggil verifyPhoneNumber , setel tanda yang menunjukkan verifikasi sedang berlangsung. Kemudian, simpan tanda di metode onSaveInstanceState Aktivitas Anda dan pulihkan tanda di onRestoreInstanceState . Terakhir, dalam metode onStart Aktivitas Anda, periksa apakah verifikasi sedang berlangsung, dan jika demikian, panggil kembali verifyPhoneNumber . Pastikan untuk menghapus tanda saat verifikasi selesai atau gagal (lihat Callback verifikasi ).

Untuk menangani rotasi layar dengan mudah dan contoh lain dari aktivitas dimulai ulang, teruskan Aktivitas Anda ke metode verifyPhoneNumber . Callback akan dilepas secara otomatis saat Aktivitas berhenti, sehingga Anda dapat dengan bebas menulis kode transisi UI dalam metode callback.

Pesan SMS yang dikirim oleh Firebase juga dapat dilokalkan dengan menentukan bahasa autentikasi melalui metode setLanguageCode pada instance Auth Anda.

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

Saat memanggil PhoneAuthProvider.verifyPhoneNumber , Anda juga harus menyediakan instance OnVerificationStateChangedCallbacks , yang berisi implementasi fungsi callback yang menangani hasil permintaan. Sebagai contoh:

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

Panggilan balik verifikasi

Di sebagian besar aplikasi, Anda mengimplementasikan onVerificationCompleted , onVerificationFailed , dan onCodeSent . Anda juga dapat menerapkan onCodeAutoRetrievalTimeOut , bergantung pada persyaratan aplikasi Anda.

padaVerifikasiSelesai(PhoneAuthCredential)

Metode ini dipanggil dalam dua situasi:

  • Verifikasi instan: dalam beberapa kasus, nomor telepon dapat langsung diverifikasi tanpa perlu mengirim atau memasukkan kode verifikasi.
  • Pengambilan otomatis: pada beberapa perangkat, layanan Google Play dapat secara otomatis mendeteksi SMS verifikasi yang masuk dan melakukan verifikasi tanpa tindakan pengguna. (Kemampuan ini mungkin tidak tersedia dengan beberapa operator.) Ini menggunakan API SMS Retriever , yang menyertakan hash 11 karakter di akhir pesan SMS.
Dalam kedua kasus tersebut, nomor telepon pengguna telah berhasil diverifikasi, dan Anda dapat menggunakan objek PhoneAuthCredential yang diteruskan ke panggilan balik untuk membuat pengguna masuk .

onVerificationFailed(FirebaseException)

Metode ini dipanggil sebagai tanggapan atas permintaan verifikasi yang tidak valid, seperti permintaan yang menetapkan nomor telepon atau kode verifikasi yang tidak valid.

onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken)

Opsional. Metode ini dipanggil setelah kode verifikasi dikirim melalui SMS ke nomor telepon yang diberikan.

Saat metode ini dipanggil, sebagian besar aplikasi menampilkan UI yang meminta pengguna mengetikkan kode verifikasi dari pesan SMS. (Pada saat yang sama, verifikasi otomatis mungkin berjalan di latar belakang.) Kemudian, setelah pengguna mengetik kode verifikasi, Anda dapat menggunakan kode verifikasi dan ID verifikasi yang diteruskan ke metode untuk membuat objek PhoneAuthCredential , yang Anda pada gilirannya dapat menggunakan untuk masuk pengguna. Namun, beberapa aplikasi mungkin menunggu hingga onCodeAutoRetrievalTimeOut dipanggil sebelum menampilkan UI kode verifikasi (tidak disarankan).

onCodeAutoRetrievalTimeOut(Id verifikasi string)

Opsional. Metode ini dipanggil setelah durasi waktu tunggu yang ditentukan untuk verifyPhoneNumber telah berlalu tanpa memicu onVerificationCompleted terlebih dahulu. Pada perangkat tanpa kartu SIM, metode ini segera dipanggil karena pengambilan otomatis SMS tidak memungkinkan.

Beberapa aplikasi memblokir input pengguna hingga periode verifikasi otomatis habis, dan baru kemudian menampilkan UI yang meminta pengguna mengetikkan kode verifikasi dari pesan SMS (tidak disarankan).

Buat objek PhoneAuthCredential

Setelah pengguna memasukkan kode verifikasi yang dikirim Firebase ke ponsel pengguna, buat objek PhoneAuthCredential , menggunakan kode verifikasi dan ID verifikasi yang diteruskan ke panggilan balik onCodeSent atau onCodeAutoRetrievalTimeOut . (Saat onVerificationCompleted dipanggil, Anda mendapatkan objek PhoneAuthCredential secara langsung, sehingga Anda dapat melewati langkah ini.)

Untuk membuat objek PhoneAuthCredential , panggil PhoneAuthProvider.getCredential :

Java

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

Kotlin+KTX

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

Masuk pengguna

Setelah Anda mendapatkan objek PhoneAuthCredential , baik dalam callback onVerificationCompleted atau dengan memanggil PhoneAuthProvider.getCredential , selesaikan alur masuk dengan meneruskan objek PhoneAuthCredential ke 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
                }
            }
}

Tes dengan nomor telepon fiktif

Anda dapat menyiapkan nomor telepon fiktif untuk pengembangan melalui Firebase console. Pengujian dengan nomor telepon fiktif memberikan manfaat berikut:

  • Uji otentikasi nomor telepon tanpa menghabiskan kuota penggunaan Anda.
  • Uji otentikasi nomor telepon tanpa mengirim pesan SMS yang sebenarnya.
  • Jalankan tes berturut-turut dengan nomor telepon yang sama tanpa dibatasi. Ini meminimalkan risiko penolakan selama proses peninjauan App store jika pengulas kebetulan menggunakan nomor telepon yang sama untuk pengujian.
  • Uji dengan mudah di lingkungan pengembangan tanpa upaya tambahan apa pun, seperti kemampuan untuk mengembangkan dalam simulator iOS atau emulator Android tanpa Layanan Google Play.
  • Tulis tes integrasi tanpa diblokir oleh pemeriksaan keamanan yang biasanya diterapkan pada nomor telepon asli di lingkungan produksi.

Nomor telepon fiktif harus memenuhi persyaratan berikut:

  1. Pastikan Anda menggunakan nomor telepon yang memang fiktif, dan belum ada. Firebase Authentication tidak mengizinkan Anda menyetel nomor telepon yang ada yang digunakan oleh pengguna sebenarnya sebagai nomor uji. Salah satu opsi adalah menggunakan 555 nomor awalan sebagai nomor telepon uji AS, misalnya: +1 650-555-3434
  2. Nomor telepon harus diformat dengan benar untuk panjang dan batasan lainnya. Mereka masih akan melalui validasi yang sama dengan nomor telepon pengguna sebenarnya.
  3. Anda dapat menambahkan hingga 10 nomor telepon untuk pengembangan.
  4. Gunakan nomor/kode telepon percobaan yang sulit ditebak dan sering-seringlah diubah.

Buat nomor telepon fiktif dan kode verifikasi

  1. Di Firebase console , buka bagian Otentikasi .
  2. Di tab Metode masuk , aktifkan penyedia Telepon jika Anda belum melakukannya.
  3. Buka menu Nomor telepon untuk menguji akordeon.
  4. Berikan nomor telepon yang ingin Anda uji, misalnya: +1 650-555-3434 .
  5. Berikan kode verifikasi 6 digit untuk nomor tersebut, misalnya: 654321 .
  6. Tambahkan nomornya. Jika perlu, Anda dapat menghapus nomor telepon dan kodenya dengan mengarahkan kursor ke baris yang sesuai dan mengklik ikon tempat sampah.

Pengujian manual

Anda dapat langsung mulai menggunakan nomor telepon fiktif di aplikasi Anda. Ini memungkinkan Anda melakukan pengujian manual selama tahap pengembangan tanpa mengalami masalah kuota atau pembatasan. Anda juga dapat menguji langsung dari simulator iOS atau emulator Android tanpa menginstal Layanan Google Play.

Saat Anda memberikan nomor telepon fiktif dan mengirim kode verifikasi, tidak ada SMS yang dikirim. Sebagai gantinya, Anda harus memberikan kode verifikasi yang dikonfigurasi sebelumnya untuk menyelesaikan proses masuk.

Saat proses masuk selesai, pengguna Firebase dibuat dengan nomor telepon tersebut. Pengguna memiliki perilaku dan properti yang sama dengan pengguna nomor telepon asli, dan dapat mengakses Realtime Database/Cloud Firestore dan layanan lainnya dengan cara yang sama. Token ID yang dicetak selama proses ini memiliki tanda tangan yang sama dengan pengguna nomor telepon asli.

Opsi lainnya adalah menetapkan peran uji melalui klaim khusus pada pengguna ini untuk membedakan mereka sebagai pengguna palsu jika Anda ingin membatasi akses lebih lanjut.

Untuk memicu aliran reCAPTCHA secara manual untuk pengujian, gunakan metode forceRecaptchaFlowForTesting() .

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

Tes integrasi

Selain pengujian manual, Firebase Authentication menyediakan API untuk membantu menulis pengujian integrasi untuk pengujian autentikasi ponsel. API ini menonaktifkan verifikasi aplikasi dengan menonaktifkan persyaratan reCAPTCHA di web dan pemberitahuan push diam di iOS. Ini memungkinkan pengujian otomatisasi dalam aliran ini dan lebih mudah diterapkan. Selain itu, mereka membantu memberikan kemampuan untuk menguji alur verifikasi instan di Android.

Di Android, panggil setAppVerificationDisabledForTesting() sebelum panggilan signInWithPhoneNumber . Ini menonaktifkan verifikasi aplikasi secara otomatis, memungkinkan Anda meneruskan nomor telepon tanpa menyelesaikannya secara manual. Perhatikan bahwa meskipun reCAPTCHA dan/atau SafetyNet dinonaktifkan, menggunakan nomor telepon asli masih akan gagal untuk menyelesaikan proses masuk. Hanya nomor telepon fiktif yang dapat digunakan dengan API ini.

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

Memanggil verifyPhoneNumber dengan nomor fiksi memicu panggilan balik onCodeSent , di mana Anda harus memberikan kode verifikasi yang sesuai. Ini memungkinkan pengujian di Android Emulator.

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)

Selain itu, Anda dapat menguji alur pengambilan otomatis di Android dengan menyetel nomor fiksi dan kode verifikasi yang sesuai untuk pengambilan otomatis dengan memanggil setAutoRetrievedSmsCodeForPhoneNumber .

Saat verifyPhoneNumber dipanggil, itu memicu onVerificationCompleted dengan PhoneAuthCredential secara langsung. Ini hanya berfungsi dengan nomor telepon fiktif.

Pastikan ini dinonaktifkan dan tidak ada nomor telepon fiktif yang di-hardcode di aplikasi Anda saat memublikasikan aplikasi Anda ke Google Play Store.

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)

Langkah selanjutnya

Setelah pengguna masuk untuk pertama kalinya, akun pengguna baru dibuat dan ditautkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna untuk masuk. Akun baru ini disimpan sebagai bagian dari proyek Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam proyek Anda, terlepas dari cara pengguna masuk.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FirebaseUser . Lihat Kelola Pengguna .

  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage , Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel auth , dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.

Anda dapat mengizinkan pengguna untuk masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Untuk mengeluarkan pengguna, panggil signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()