अपने ऐप्लिकेशन में Facebook Login को इंटिग्रेट करके, उपयोगकर्ताओं को अपने Facebook खातों का इस्तेमाल करके Firebase से पुष्टि करने की अनुमति दी जा सकती है.
शुरू करने से पहले
- अपने C++ प्रोजेक्ट में Firebase जोड़ें.
- Facebook for Developers साइट पर जाकर, अपने ऐप्लिकेशन के लिए ऐप्लिकेशन आईडी और ऐप्लिकेशन सीक्रेट पाएं.
- Facebook से लॉगिन करने की सुविधा चालू करें:
- Firebase कंसोल में, Authentication सेक्शन खोलें.
- साइन इन करने का तरीका टैब पर, Facebook से साइन इन करने का तरीका चालू करें. साथ ही, Facebook से मिले ऐप्लिकेशन आईडी और ऐप्लिकेशन सीक्रेट की जानकारी दें.
- इसके बाद, पक्का करें कि आपका OAuth रीडायरेक्ट यूआरआई (जैसे कि
my-app-12345.firebaseapp.com/__/auth/handler
), Facebook for Developers साइट पर, Facebook ऐप्लिकेशन के सेटिंग पेज में, OAuth रीडायरेक्ट यूआरआई के तौर पर शामिल हो. इसके लिए, Product Settings > Facebook Login कॉन्फ़िगरेशन में जाएं.
firebase::auth::Auth
क्लास को ऐक्सेस करना
Auth
क्लास, सभी एपीआई कॉल के लिए गेटवे है.
- Auth और App हेडर फ़ाइलें जोड़ें:
#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::App
के लिएfirebase::auth::Auth
क्लास पाएं.App
औरAuth
के बीच वन-टू-वन मैपिंग होती है.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Firebase की मदद से पुष्टि करना
- साइन इन किए हुए Facebook उपयोगकर्ता के लिए ऐक्सेस टोकन पाने के लिए, Android और iOS+ के लिए दिए गए निर्देशों का पालन करें.
- जब कोई उपयोगकर्ता साइन इन कर लेता है, तो ऐक्सेस टोकन को 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
की मदद से, हर अपडेट के बाद नतीजे देखे जा सकते हैं: इसके अलावा, अगर आपका प्रोग्राम इवेंट पर आधारित है, तो Future पर कॉलबैक रजिस्टर करें.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()); } }
Future पर कॉलबैक रजिस्टर करना
कुछ प्रोग्राम में ऐसेUpdate
फ़ंक्शन होते हैं जिन्हें हर सेकंड में 30 या 60 बार कॉल किया जाता है.
उदाहरण के लिए, कई गेम इस मॉडल का इस्तेमाल करते हैं. ये प्रोग्राम, एसिंक्रोनस कॉल को पोल करने के लिए LastResult
फ़ंक्शन को कॉल कर सकते हैं.
हालांकि, अगर आपका प्रोग्राम इवेंट पर आधारित है, तो आपको कॉलबैक फ़ंक्शन रजिस्टर करने चाहिए.
Future पूरा होने पर, कॉलबैक फ़ंक्शन को कॉल किया जाता है.
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); }
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
ऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी पाई जा सकती है: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 Database और Cloud Storage सुरक्षा नियमों में,
auth
वैरिएबल से साइन इन किए हुए उपयोगकर्ता का यूनीक User-ID पाया जा सकता है. साथ ही, इसका इस्तेमाल यह कंट्रोल करने के लिए किया जा सकता है कि कोई उपयोगकर्ता किस डेटा को ऐक्सेस कर सकता है.
उपयोगकर्ताओं को पुष्टि करने वाले कई प्रोवाइडर का इस्तेमाल करके, आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. इसके लिए, पुष्टि करने वाले प्रोवाइडर के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करें.
किसी उपयोगकर्ता को साइन आउट करने के लिए,
SignOut()
को कॉल करें:
auth->SignOut();