المصادقة باستخدام "مركز الألعاب"

يمكنك استخدام Game Center لتسجيل دخول اللاعبين إلى لعبة على منصات Apple تم إنشاؤها باستخدام Firebase. لاستخدام ميزة "تسجيل الدخول إلى Game Center باستخدام Firebase"، عليك أولاً التأكّد من أنّ اللاعب المحلي قد سجّل الدخول باستخدام Game Center، ثم استخدام العنصر GameCenterAuthProvider لإنشاء بيانات اعتماد Firebase، والتي يمكنك استخدامها للمصادقة مع Firebase.

قبل البدء

استخدِم أداة Swift Package Manager لتثبيت الملحقات التابعة لـ Firebase وإدارتها.

  1. في Xcode، بعد فتح مشروع تطبيقك، انتقِل إلى ملف (File) > إضافة حِزم (Add Packages).
  2. عندما يُطلب منك ذلك، أضِف مستودع حزمة تطوير البرامج (SDK) لمنصة Firebase على أجهزة Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. اختَر مكتبة Firebase Authentication.
  5. أضِف العلامة -ObjC إلى قسم علامات الرابط الأخرى في إعدادات الإصدار الخاص بالكائن المستهدف.
  6. بعد الانتهاء، سيبدأ Xcode تلقائيًا في حلّ التبعيات وتنزيلها في الخلفية.

بعد ذلك، اتّبِع خطوات الضبط التالية:

  1. تأكَّد من تسجيل تطبيق Apple في Firebase. ويعني ذلك إدخال معرّف حزمة تطبيقك في قسم التسجيل مع معلومات اختيارية إضافية، مثل معرّف App Store ومعرّف الفريق وما إلى ذلك. سيكون ذلك مطلوبًا للتحقّق بشكل آمن من جمهور بيانات اعتماد Game Center الخاصة بالمستخدم قبل إكمال عملية تسجيل الدخول.
  2. فعِّل Game Center كموفّر تسجيل دخول لمشروعك على Firebase:
    1. في وحدة تحكّم Firebase، افتح قسم المصادقة.
    2. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر تسجيل الدخول Game Center.

دمج ميزة "تسجيل الدخول إلى Game Center" في لعبتك

أولاً، إذا كانت لعبتك لا تستخدم Game Center، اتّبِع التعليمات الواردة في Incorporating Game Center into Your Game و Authenticating a Local Player on the Device على موقع 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 Realtime Database و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;
}