Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติสำหรับชุมชนคนผิวดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ตรวจสอบสิทธิ์การใช้ GitHub และ C ++

คุณสามารถอนุญาตให้ผู้ใช้รับรองความถูกต้องกับ Firebase โดยใช้บัญชี GitHub ของพวกเขาโดยรวมการตรวจสอบ GitHub เข้ากับแอปของคุณ

ก่อนที่จะเริ่ม

  1. เพิ่ม Firebase ให้กับโครงการ C ++ ของ คุณ
  2. ในโครงการระดับ build.gradle ไฟล์ให้แน่ใจว่าจะรวมถึงพื้นที่เก็บข้อมูล Maven ของ Google ในทั้งสองของคุณ buildscript และ allprojects ส่วน
  3. ใน คอนโซล Firebase ให้เปิดส่วน Auth
  4. บนแท็บ วิธีลงชื่อเข้า ใช้ให้เปิดใช้งานผู้ให้บริการ GitHub
  5. เพิ่ม รหัสลูกค้า และ ความลับลูกค้า จากคอนโซลนักพัฒนาซอฟต์แวร์ของผู้ให้บริการไปยังการกำหนดค่าผู้ให้บริการ:
    1. ลงทะเบียนแอปของคุณ เป็น แอปพลิเคชัน นักพัฒนาบน GitHub และรับ OAuth 2.0 Client ID และ ความลับลูกค้า ของแอปของคุณ
    2. ตรวจสอบให้แน่ใจว่า Firebase OAuth เปลี่ยนเส้นทาง URI (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) ของคุณ ได้รับการ ตั้งค่าเป็น URL การติดต่อกลับ ของการ อนุญาต ในหน้าการตั้งค่าแอพของคุณในการกำหนดค่า แอป GitHub
  6. คลิก บันทึก

เข้าถึง firebase::auth::Auth class firebase::auth::Auth

คลาส Auth เป็นเกตเวย์สำหรับการโทร API ทั้งหมด
  1. เพิ่มไฟล์ส่วนหัว Auth และ App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. ในรหัสเริ่มต้นของคุณสร้าง firebase::App คลาส firebase::App
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. รับ firebase::auth::Auth class firebase::auth::Auth สำหรับ firebase::App คุณ มีการแมปแบบหนึ่งต่อหนึ่งระหว่าง App และการ Auth
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

รับรองความถูกต้องกับ Firebase

  1. ทำตามคำแนะนำสำหรับ Android และ iOS เพื่อรับโทเค็นสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ GitHub
  2. หลังจากผู้ใช้ลงชื่อเข้าใช้สำเร็จให้แลกเปลี่ยนโทเค็นสำหรับข้อมูลรับรอง Firebase และรับรองความถูกต้องกับ Firebase โดยใช้ข้อมูลรับรอง Firebase:
    firebase::auth::Credential credential =
        firebase::auth::GitHubAuthProvider::GetCredential(token);
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCredential(credential);
    
  3. หากโปรแกรมของคุณมีลูปการอัปเดตที่ทำงานเป็นประจำ (พูดที่ 30 หรือ 60 ครั้งต่อวินาที) คุณสามารถตรวจสอบผลลัพธ์หนึ่งครั้งต่อการอัปเดตด้วย Auth::SignInWithCredentialLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCredentialLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    หรือหากโปรแกรมของคุณเป็นตัวขับเคลื่อนกิจกรรมคุณอาจต้องการ ลงทะเบียนการติดต่อกลับในอนาคต

ลงทะเบียนการติดต่อกลับในอนาคต

บางโปรแกรมมีฟังก์ชั่น Update ที่เรียกว่า 30 หรือ 60 ครั้งต่อวินาที ตัวอย่างเช่นมีหลายเกมที่ใช้โมเดลนี้ โปรแกรมเหล่านี้สามารถเรียกใช้ฟังก์ชัน LastResult เพื่อสำรวจการโทรแบบอะซิงโครนัส อย่างไรก็ตามหากโปรแกรมของคุณทำงานตามเหตุการณ์คุณอาจต้องการลงทะเบียนฟังก์ชั่นการโทรกลับ ฟังก์ชั่นการโทรกลับถูกเรียกเมื่อเสร็จสิ้นของอนาคต
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
ฟังก์ชั่นโทรกลับสามารถเป็นแลมบ์ดาได้หากต้องการ
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // The lambda has the same signature as the callback function.
  result.OnCompletion(
      [](const firebase::Future<firebase::auth::User*>& 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 ของคุณและสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโครงการของคุณโดยไม่คำนึงว่าผู้ใช้ลงชื่อเข้าใช้อย่างไร

  • ในแอพของคุณคุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้จาก firebase::auth::User วัตถุ firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // 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 firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • ใน กฎ ฐานข้อมูล Firebase Realtime และ Cloud Storage Security คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

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

ในการออกจากระบบผู้ใช้โทร SignOut() :

auth->SignOut();