Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Otentikasi dengan Firebase menggunakan Nomor Telepon dengan Unity

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.

Dokumen ini menjelaskan cara menerapkan alur masuk dengan nomor telepon menggunakan SDK Firebase.

Sebelum kamu memulai

  1. Sebelum dapat menggunakan Firebase Authentication , Anda perlu menambahkan Firebase Unity SDK (khususnya, FirebaseAuth.unitypackage ) ke proyek Unity Anda.

    Temukan petunjuk mendetail untuk langkah penyiapan awal ini di Tambahkan Firebase ke proyek Unity Anda .

  2. Jika Anda belum menghubungkan aplikasi ke proyek Firebase, lakukan dari Firebase console .

Di iOS, perhatikan bahwa masuk dengan nomor telepon memerlukan perangkat fisik dan tidak akan berfungsi pada simulator.

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 .

Mulai menerima pemberitahuan APN (khusus iOS)

Untuk menggunakan autentikasi nomor telepon di iOS, aplikasi Anda harus dapat menerima notifikasi APN dari Firebase. Saat Anda memasukkan pengguna dengan nomor telepon mereka untuk pertama kalinya di perangkat, Firebase Authentication mengirimkan pemberitahuan push diam ke perangkat untuk memverifikasi bahwa permintaan masuk dengan nomor telepon berasal dari aplikasi Anda. (Untuk alasan ini, masuk dengan nomor telepon tidak dapat digunakan di simulator.)

Untuk mengaktifkan notifikasi APN untuk digunakan dengan Firebase Authentication:

  1. Di Xcode, aktifkan pemberitahuan push untuk proyek Anda.
  2. Unggah sertifikat APN Anda ke Firebase. Jika Anda belum memiliki sertifikat APN, pastikan untuk membuatnya di Pusat Anggota Pengembang Apple .

    1. Di dalam proyek Anda di Firebase console, pilih ikon roda gigi, pilih Pengaturan Proyek , lalu pilih tab Pesan Awan .

    2. Pilih tombol Unggah Sertifikat untuk sertifikat pengembangan, sertifikat produksi, atau keduanya. Setidaknya satu diperlukan.

    3. Untuk setiap sertifikat, pilih file .p12, dan berikan kata sandi, jika ada. Pastikan ID paket untuk sertifikat ini cocok dengan ID paket aplikasi Anda. Pilih Simpan .

Kirim kode verifikasi ke ponsel pengguna

Untuk memulai proses masuk dengan nomor telepon, berikan antarmuka kepada pengguna yang meminta mereka untuk memberikan nomor telepon mereka, lalu hubungi PhoneAuthProvider.VerifyPhoneNumber untuk meminta Firebase mengirimkan kode autentikasi ke ponsel pengguna melalui SMS:

  1. Dapatkan nomor telepon pengguna.

    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.

  2. Hubungi PhoneAuthProvider.VerifyPhoneNumber , dengan memberikan nomor telepon pengguna.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    Saat Anda memanggil PhoneAuthProvider.VerifyPhoneNumber , Firebase,
    • (di iOS), mengirimkan pemberitahuan push diam ke aplikasi Anda.
    • Firebase mengirim pesan SMS yang berisi kode autentikasi ke nomor telepon yang ditentukan dan meneruskan ID verifikasi ke fungsi penyelesaian Anda. Anda akan memerlukan kode verifikasi dan ID verifikasi untuk memasukkan pengguna.
  3. Simpan ID verifikasi dan pulihkan saat aplikasi Anda dimuat. Dengan melakukannya, Anda dapat memastikan bahwa Anda masih memiliki ID verifikasi yang valid jika aplikasi Anda dihentikan sebelum pengguna menyelesaikan alur masuk (misalnya, saat beralih ke aplikasi SMS).

    Anda dapat mempertahankan ID verifikasi dengan cara apa pun yang Anda inginkan. Cara sederhana adalah menyimpan ID verifikasi dengan UnityEngine.PlayerPrefs .

Jika panggilan balik yang diteruskan ke codeSent dipanggil, Anda dapat meminta pengguna untuk mengetikkan kode verifikasi saat mereka menerimanya dalam pesan SMS.

Di sisi lain, jika panggilan balik untuk verificationCompleted dipanggil, maka verifikasi otomatis telah berhasil dan Anda sekarang akan memiliki Credential yang dapat Anda gunakan seperti yang dijelaskan di bawah ini.

Masuk pengguna dengan kode verifikasi

Setelah pengguna menyediakan aplikasi Anda dengan kode verifikasi dari pesan SMS, login pengguna dengan membuat objek Credential dari kode verifikasi dan ID verifikasi dan meneruskan objek itu ke FirebaseAuth.SignInWithCredential .

  1. Dapatkan kode verifikasi dari pengguna.
  2. Buat objek Credential dari kode verifikasi dan ID verifikasi.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Masuk pengguna dengan objek Credential :
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

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 Firebase.Auth.FirebaseUser :

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • 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() :

auth.SignOut();