באפשרותך לאפשר למשתמשים לבצע אימות באמצעות Firebase באמצעות חשבונות הפייסבוק שלהם על ידי שילוב הכניסה לפייסבוק באפליקציה שלך.
לפני שאתה מתחיל
- הוסף את Firebase לפרויקט C ++ שלך .
- באתר פייסבוק למפתחים , קבלו את מזהה האפליקציה וסוד האפליקציה לאפליקציה שלכם.
- אפשר כניסה לפייסבוק:
- במסוף Firebase , פתח את החלק Auth .
- בכרטיסיה שיטת כניסה , הפעל את שיטת הכניסה לפייסבוק וציין את מזהה האפליקציה וסוד האפליקציה שקיבלת מפייסבוק.
- לאחר מכן, וודא ש- URI
my-app-12345.firebaseapp.com/__/auth/handler
OAuth שלך (למשלmy-app-12345.firebaseapp.com/__/auth/handler
) מופיע כאחד מ-my-app-12345.firebaseapp.com/__/auth/handler
OAuth בדף ההגדרות של אפליקציית פייסבוק שלך באתר Facebook עבור מפתחים במוצר. הגדרות> תצורת הכניסה לפייסבוק .
גש ל- firebase::auth::Auth
class
מחלקת Auth
היא השער לכל שיחות ה- API.- הוסף את קבצי הכותרת Auth ו- App:
#include "firebase/app.h" #include "firebase/auth.h"
- בקוד האתחול שלך, צור
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__)
- רכוש את
firebase::auth::Auth
מחלקהfirebase::App
עבורfirebase::App
. יש מיפוי אחד לאחד ביןApp
Auth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
אמת עם Firebase
- עקוב אחר ההוראות עבור Android ו- iOS כדי לקבל אסימון גישה למשתמש הפייסבוק המחובר.
- לאחר שמשתמש נכנס בהצלחה, החלף את אסימון הגישה לאישור Firebase ואמת באמצעות Firebase באמצעות אישורי Firebase:
firebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token); firebase::Future<firebase::auth::User*> result = auth->SignInWithCredential(credential);
- אם לתוכנית שלך יש לולאת עדכון הפועלת באופן קבוע (נניח ב 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 ובכללי האבטחה של אחסון בענן, אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש
auth
ממשתנהauth
, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.
באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים.
כדי לצאת ממשתמש, התקשר ל- SignOut()
:
auth->SignOut();