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

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

قبل البدء

يمكنك استخدام "مدير حزم Swift" لتثبيت اعتماديات Firebase وإدارتها.

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

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

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

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

أولاً، إذا كانت لعبتك لا تستخدم "مركز الألعاب" حاليًا، يجب اتّباع التعليمات الواردة في دمج مركز الألعاب في لعبتك ومصادقة لاعب محلي على الجهاز على الموقع الإلكتروني للمطوّرين من Apple.

تأكّد من أنّ معرِّف الحزمة الذي تقدّمه في iTunes Connect يتطابق مع معرّف الحزمة الذي استخدمته عند ربط تطبيقك بمشروعك في Firebase.

كجزء من عملية الدمج مع "مركز الألعاب"، يمكنك تحديد معالج مصادقة يتم استدعاؤه عند مراحل متعددة في عملية المصادقة في "مركز الألعاب". في هذا المعالج، تحقق مما إذا كان اللاعب قد سجّل الدخول من خلال مركز الألعاب. إذا كان الأمر كذلك، يمكنك متابعة تسجيل الدخول إلى 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.
    }];
  }
}];

الخطوات اللاحقة

بعد أن يسجّل المستخدم الدخول للمرة الأولى، يتم إنشاء حساب مستخدم جديد وربطه برقم تعريفه في مركز الألعاب. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على Firebase، ويمكن استخدامه لتحديد هوية مستخدم على مستوى كل تطبيق في مشروعك.

في لعبتك، يمكنك الحصول على المعرّف الفريد في 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;
}