يمكنك السماح لمستخدميك بالمصادقة مع Firebase باستخدام حساباتهم على Facebook من خلال دمج تسجيل الدخول من Facebook في تطبيقك.
قبل ان تبدأ
- أضف Firebase إلى مشروع C ++ الخاص بك .
- على موقع Facebook for Developers ، احصل على معرف التطبيق وسر التطبيق لتطبيقك.
- تمكين تسجيل الدخول إلى Facebook:
- في وحدة تحكم Firebase ، افتح قسم المصادقة .
- في علامة تبويب طريقة تسجيل الدخول ، قم بتمكين طريقة تسجيل الدخول إلى Facebook وحدد معرف التطبيق وسر التطبيق الذي حصلت عليه من Facebook.
- بعد ذلك ، تأكد من إدراج عنوان URI لإعادة توجيه OAuth (على سبيل المثال
my-app-12345.firebaseapp.com/__/auth/handler
) كأحد عناوين URI لإعادة توجيه OAuth في صفحة إعدادات تطبيق Facebook على موقع Facebook for Developers في المنتج الإعدادات> تكوين تسجيل الدخول إلى Facebook .
قم بالوصول إلى firebase::auth::Auth
class
فئة Auth
هي البوابة لجميع استدعاءات API.- قم بإضافة ملفات رأس التطبيق والمصادقة:
#include "firebase/app.h" #include "firebase/auth.h"
- في رمز التهيئة ، أنشئ فئة
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
class لـfirebase::App
. هناك تعيين واحد لواحد بينApp
Auth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
المصادقة باستخدام Firebase
- اتبع التعليمات لنظامي التشغيل Android و iOS + للحصول على رمز وصول لمستخدم Facebook الذي قام بتسجيل الدخول.
- بعد نجاح المستخدم في تسجيل الدخول ، استبدل رمز الوصول الخاص ببيانات اعتماد Firebase ، وقم بالمصادقة مع Firebase باستخدام بيانات اعتماد Firebase:
firebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token); firebase::Future<firebase::auth::AuthResult> result = auth->SignInAndRetrieveDataWithCredential(credential);
- إذا كان برنامجك يحتوي على حلقة تحديث تعمل بانتظام (لنقل 30 أو 60 مرة في الثانية) ، فيمكنك التحقق من النتائج مرة واحدة لكل تحديث باستخدام
Auth::SignInAndRetrieveDataWithCredentialLastResult
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInAndRetrieveDataWithCredentialLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.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::AuthResult> result = auth->CreateUserWithEmailAndPasswordLastResult(); // `&my_program_context` is passed verbatim to OnCreateCallback(). result.OnCompletion(OnCreateCallback, &my_program_context); }يمكن أن تكون وظيفة رد الاتصال أيضًا lambda ، إذا كنت تفضل ذلك.
void CreateUserUsingLambda(firebase::auth::Auth* auth) { // Callbacks work the same for any firebase::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::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
object:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { 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 وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير
auth
، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم حالي.
لتسجيل خروج مستخدم ، اتصل بـ SignOut()
:
auth->SignOut();