يمكنك استخدام Game Center لتسجيل دخول اللاعبين إلى لعبة على منصات Apple تم إنشاؤها على Firebase. لاستخدام ميزة "تسجيل الدخول إلى Game Center" مع Firebase، تأكَّد أولاً من تسجيل دخول اللاعب المحلي باستخدام Game Center، ثم استخدِم عنصر GameCenterAuthProvider لإنشاء بيانات اعتماد Firebase، التي يمكنك استخدامها للمصادقة مع Firebase.
قبل البدء
استخدِم Swift Package Manager لتثبيت التبعيات في Firebase وإدارتها.
- في Xcode، افتح مشروع تطبيقك وانتقِل إلى ملف > إضافة حِزم.
- عندما يُطلب منك ذلك، أضِف مستودع حزمة تطوير البرامج (SDK) لمنصات Firebase Apple:
- اختَر مكتبة Firebase Authentication.
- أضِف العلامة
-ObjCإلى قسم علامات الرابط الأخرى في إعدادات الإصدار للهدف. - بعد الانتهاء، سيبدأ Xcode تلقائيًا في حلّ التبعيات وتنزيلها في الخلفية.
https://github.com/firebase/firebase-ios-sdk.git
بعد ذلك، نفِّذ بعض خطوات الضبط:
- تأكَّد من تسجيل تطبيقك على Apple في Firebase. يعني ذلك إدخال رقم تعريف حزمة تطبيقك في قسم التسجيل بالإضافة إلى معلومات اختيارية إضافية، مثل رقم تعريف App Store ورقم تعريف الفريق وما إلى ذلك. سيكون ذلك مطلوبًا للتحقّق بشكل آمن من جمهور بيانات اعتماد المستخدم في Game Center قبل إكمال عملية تسجيل الدخول.
- فعِّل Game Center كموفِّر لتسجيل الدخول في مشروعك على Firebase:
- في وحدة تحكّم Firebaseconsole، افتح قسم المصادقة.
- في علامة التبويب طريقة تسجيل الدخول ، فعِّل موفِّر تسجيل الدخول Game Center.
دمج ميزة "تسجيل الدخول إلى Game Center" في لعبتك
أولاً، إذا كانت لعبتك لا تستخدِم Game Center بعد، اتّبِع التعليمات الواردة في دمج Game Center في لعبتك و مصادقة لاعب محلي على الجهاز على موقع مطوّري Apple الإلكتروني.
تأكَّد من أنّ رقم تعريف الحزمة الذي تقدّمه إلى iTunes Connect يطابق رقم تعريف الحزمة الذي استخدمته عند ربط تطبيقك بمشروع Firebase.
كجزء من عملية دمج Game Center، عليك تحديد معالج مصادقة يتم استدعاؤه في نقاط متعددة في عملية مصادقة Game Center. في هذا المعالج، تحقَّق مما إذا كان اللاعب قد سجّل الدخول باستخدام Game Center. إذا كان الأمر كذلك، يمكنك متابعة تسجيل الدخول إلى Firebase.
Swift
let localPlayer = GKLocalPlayer.localPlayer() localPlayer.authenticateHandler = { (gcAuthViewController?, error) in if let gcAuthViewController = gcAuthViewController { // Pause any activities that require user interaction, then present the // gcAuthViewController to the player. } else if localPlayer.isAuthenticated { // Player is signed in to Game Center. Get Firebase credentials from the // player's Game Center credentials (see below). } else { // Error } }
Objective-C
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; localPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController, NSError *error) { if (gcAuthViewController != nil) { // Pause any activities that require user interaction, then present the // gcAuthViewController to the player. } else if (localPlayer.isAuthenticated) { // Player is signed in to Game Center. Get Firebase credentials from the // player's Game Center credentials (see below). } else { // Error } };
المصادقة باستخدام Firebase
بعد التأكّد من أنّ اللاعب المحلي قد سجّل الدخول باستخدام Game Center، سجِّل دخول اللاعب إلى لعبتك من خلال إنشاء عنصر AuthCredential باستخدام GameCenterAuthProvider.getCredential() وتمرير هذا العنصر إلى signIn(with:):
Swift
// Get Firebase credentials from the player's Game Center credentials GameCenterAuthProvider.getCredential() { (credential, error) in if let error = error { return } // The credential can be used to sign in, or re-auth, or link or unlink. Auth.auth().signIn(with:credential) { (user, error) in if let error = error { return } // Player is signed in! }
Objective-C
// Get Firebase credentials from the player's Game Center credentials [FIRGameCenterAuthProvider getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { // The credential can be used to sign in, or re-auth, or link or unlink. if (error == nil) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRUser *user, NSError *error) { // If error is nil, player is signed in. }]; } }];
الخطوات التالية
بعد أن يُسجِّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه برقم تعريف Game Center الخاص به. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على Firebase، ويمكن استخدامه لتحديد هوية المستخدم في كل تطبيق في مشروعك.
في لعبتك، يمكنك الحصول على رقم تعريف المستخدم (UID) في Firebase من عنصر User:
Swift
let user = Auth.auth().currentUser if let user = user { let playerName = user.displayName // 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 getToken(with:) instead. let uid = user.uid }
Objective-C
FIRUser *user = [FIRAuth auth].currentUser; if (user) { NSString *playerName = user.displayName; // 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 getTokenWithCompletion:completion: instead. NSString *uid = user.uid; }
في قواعد الأمان في قاعدة بيانات Firebase في الوقت الفعلي وCloud Storage، يمكنك الحصول على رقم تعريف المستخدم الفريد للمستخدم الذي سجّل الدخول من متغيّر auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.
للحصول على معلومات اللاعب في Game Center أو للوصول إلى خدمات Game Center ، استخدِم واجهات برمجة التطبيقات التي توفّرها Game Kit.
لتسجيل خروج مستخدم من Firebase، استخدِم Auth.signOut():
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }