เริ่มต้นใช้งานการตรวจสอบสิทธิ์ Firebase ใน C++

คุณสามารถใช้ Firebase Authentication เพื่ออนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้วิธีการลงชื่อเข้าใช้หนึ่งวิธีขึ้นไป ซึ่งรวมถึงการลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน รวมถึง ผู้ให้บริการข้อมูลประจำตัวแบบรวม เช่น Google Sign-In และ Facebook Login บทแนะนำนี้จะช่วยให้คุณเริ่มต้นใช้งาน Firebase Authentication โดยแสดงวิธีเพิ่ม การลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่านในแอป

เชื่อมต่อโปรเจ็กต์ C++ กับ Firebase

ก่อนที่จะใช้ Firebase Authentication คุณต้องทำสิ่งต่อไปนี้

  • ลงทะเบียนโปรเจ็กต์ C++ และกําหนดค่าให้ใช้ Firebase

    หากโปรเจ็กต์ C++ ใช้ Firebase อยู่แล้ว ก็แสดงว่าได้ลงทะเบียนและ กำหนดค่าสำหรับ Firebase แล้ว

  • เพิ่ม Firebase C++ SDK ลงในโปรเจ็กต์ C++

โปรดทราบว่าการเพิ่ม Firebase ลงในโปรเจ็กต์ C++ จะเกี่ยวข้องกับงานทั้งในFirebaseคอนโซลและในโปรเจ็กต์ C++ ที่เปิดอยู่ (เช่น คุณดาวน์โหลดไฟล์กำหนดค่า Firebase จากคอนโซล แล้วย้ายไปยังโปรเจ็กต์ C++)

ลงชื่อสมัครใช้ผู้ใช้ใหม่

สร้างแบบฟอร์มที่ช่วยให้ผู้ใช้ใหม่ลงทะเบียนกับแอปของคุณได้โดยใช้อีเมลและรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว ให้ตรวจสอบ อีเมลและรหัสผ่านที่ผู้ใช้ระบุ จากนั้นส่งไปยังเมธอด CreateUserWithEmailAndPassword

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

คุณตรวจสอบสถานะของการดำเนินการสร้างบัญชีได้โดยการลงทะเบียน การเรียกกลับในออบเจ็กต์ CreateUserWithEmailAndPasswordLastResult Future หรือ หากคุณเขียนเกมหรือแอปที่มีลูปการอัปเดตเป็นระยะ ให้สำรวจสถานะในลูปการอัปเดต

เช่น การใช้ 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);

หรือหากต้องการใช้การสำรวจ ให้ทำตามตัวอย่างต่อไปนี้ในลูปการอัปเดตของเกม

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

ลงชื่อเข้าใช้ผู้ใช้ที่มีอยู่

สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้เดิมลงชื่อเข้าใช้โดยใช้อีเมล และรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว ให้เรียกใช้เมธอด SignInWithEmailAndPassword

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

รับผลลัพธ์ของการดำเนินการลงชื่อเข้าใช้ในลักษณะเดียวกับที่คุณได้รับผลลัพธ์ของการลงชื่อสมัครใช้

ตั้งค่าเครื่องมือฟังสถานะการตรวจสอบสิทธิ์และรับข้อมูลบัญชี

หากต้องการตอบสนองต่อเหตุการณ์การลงชื่อเข้าใช้และลงชื่อออก ให้แนบ Listener กับออบเจ็กต์การตรวจสอบสิทธิ์ส่วนกลาง ระบบจะเรียกใช้ Listener นี้ทุกครั้งที่สถานะการลงชื่อเข้าใช้ของผู้ใช้มีการเปลี่ยนแปลง เนื่องจาก Listener จะทํางานหลังจากที่ออบเจ็กต์การตรวจสอบสิทธิ์ได้รับการเริ่มต้นอย่างสมบูรณ์และหลังจากที่การเรียกเครือข่ายเสร็จสมบูรณ์แล้ว จึงเป็นที่ที่ดีที่สุดในการรับข้อมูลเกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้

สร้าง Listener โดยการใช้firebase::auth::AuthStateListenerคลาสแบบนามธรรม ตัวอย่างเช่น หากต้องการสร้าง Listener ที่รับข้อมูลเกี่ยวกับ ผู้ใช้เมื่อผู้ใช้ลงชื่อเข้าใช้สำเร็จ ให้ทำดังนี้

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

แนบ Listener ด้วยเมธอด AddAuthStateListener ของออบเจ็กต์ firebase::auth::Auth ดังนี้

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

ขั้นตอนถัดไป

ดูวิธีเพิ่มการรองรับผู้ให้บริการข้อมูลประจำตัวอื่นๆ และบัญชีผู้ใช้ชั่วคราวแบบไม่ระบุตัวตน