يمكنك استخدام Firebase Authentication للسماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طريقة واحدة أو أكثر من طرق تسجيل الدخول، بما في ذلك تسجيل الدخول باستخدام عنوان البريد الإلكتروني وكلمة المرور، وموفّري خدمات تحديد الهوية الموحّدة، مثل "تسجيل الدخول باستخدام حساب Google" و"تسجيل الدخول باستخدام حساب Facebook". يساعدك هذا البرنامج التعليمي في بدء استخدام Firebase Authentication من خلال توضيح كيفية إضافة ميزة تسجيل الدخول باستخدام عنوان البريد الإلكتروني وكلمة المرور إلى تطبيقك.
ربط مشروع C++ بمنصة Firebase
قبل أن تتمكّن من استخدام Firebase Authentication، عليك إجراء ما يلي:
سجِّل مشروع C++ الخاص بك وأعدَّه لاستخدام Firebase.
إذا كان مشروع C++ يستخدم Firebase من قبل، يكون قد تم تسجيله وإعداده لاستخدام Firebase.
أضِف حزمة تطوير البرامج (SDK) الخاصة بـ Firebase C++ إلى مشروع 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);
احصل على نتيجة عملية تسجيل الدخول بالطريقة نفسها التي حصلت بها على نتيجة عملية الاشتراك.
ضبط أداة معالجة حالة المصادقة والحصول على بيانات الحساب
للردّ على أحداث تسجيل الدخول والخروج، أرفِق أداة معالجة بكائن المصادقة العام. يتم استدعاء أداة معالجة الأحداث هذه كلما تغيّرت حالة تسجيل الدخول للمستخدم. وبما أنّ أداة معالجة الأحداث لا تعمل إلا بعد اكتمال عملية تهيئة عنصر المصادقة وبعد اكتمال أي طلبات على الشبكة، فإنّها المكان الأفضل للحصول على معلومات حول المستخدم الذي سجّل الدخول.
أنشئ أداة معالجة من خلال تنفيذ الفئة المجردة firebase::auth::AuthStateListener. على سبيل المثال، لإنشاء أداة معالجة تستقبل معلومات عن المستخدم عند تسجيل الدخول بنجاح:
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");
}
// ...
}
};
اربط أداة معالجة الأحداث بالعنصر firebase::auth::Auth باستخدام الإجراء AddAuthStateListener:
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);
الخطوات التالية
تعرَّف على كيفية إضافة دعم لموفّري الهوية الآخرين وحسابات الضيوف المجهولين: