Memulai Firebase Authentication di C++

Anda dapat menggunakan Firebase Authentication untuk mengizinkan pengguna login ke aplikasi Anda menggunakan satu atau beberapa metode login, termasuk login dengan alamat email dan sandi, serta penyedia identitas tergabung seperti Login dengan Google dan Login dengan Facebook. Tutorial ini akan memandu Anda memulai Firebase Authentication dengan menunjukkan cara menambahkan login dengan alamat email dan sandi ke aplikasi Anda.

Menghubungkan project C++ Anda ke Firebase

Sebelum dapat menggunakan Firebase Authentication, Anda harus:

  • Mendaftarkan project C++ Anda dan mengonfigurasikannya untuk menggunakan Firebase.

    Jika project C++ Anda telah menggunakan Firebase, berarti project tersebut telah terdaftar dan dikonfigurasi untuk Firebase.

  • Menambahkan Firebase C++ SDK ke project C++ Anda.

Perlu diperhatikan bahwa penambahan Firebase ke project C++ Anda melibatkan tugas di Firebase console dan di project C++ terbuka (misalnya, Anda mendownload file konfigurasi Firebase dari konsol, lalu memindahkannya ke project C++).

Mendaftarkan pengguna baru

Buat formulir yang memungkinkan pengguna baru mendaftar ke aplikasi Anda menggunakan alamat email dan sandinya. Saat pengguna mengisi formulir, validasi alamat email dan sandi yang diberikan oleh pengguna, lalu teruskan ke metode CreateUserWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

Anda dapat memeriksa status operasi pembuatan akun dengan mendaftarkan callback pada objek Future CreateUserWithEmailAndPasswordLastResult, atau, jika Anda menulis game atau aplikasi dengan semacam loop update berkala melalui polling status di loop update.

Misalnya, menggunakan Future:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

Atau, untuk menggunakan polling, lakukan sesuatu seperti contoh berikut di loop update game Anda:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Membuat pengguna yang ada agar login

Buat formulir yang dapat dipakai pengguna yang ada untuk login menggunakan alamat email dan sandinya. Setelah pengguna melengkapi formulir, panggil metode SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

Dapatkan hasil operasi login dengan menggunakan cara yang sama seperti untuk mendapatkan hasil pendaftaran.

Menyetel pemroses status autentikasi dan mendapatkan data akun

Untuk merespons peristiwa login dan logout, pasang pemroses ke objek autentikasi global. Pemroses ini akan dipanggil setiap kali status login pengguna berubah. Karena pemroses berjalan hanya setelah objek autentikasi diinisialisasi sepenuhnya dan setelah panggilan jaringan selesai, ini adalah tempat terbaik untuk mendapatkan informasi tentang pengguna yang login.

Buat pemroses dengan menerapkan class abstrak firebase::auth::AuthStateListener. Misalnya, untuk membuat pemroses yang mendapatkan informasi tentang pengguna saat pengguna berhasil login:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

Lampirkan pemroses dengan metode AddAuthStateListener objek firebase::auth::Auth:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Langkah berikutnya

Pelajari cara menambahkan dukungan untuk penyedia identitas lainnya dan akun tamu anonim: