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

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

قبل البدء

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

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

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

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

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

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

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

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

بعد التأكّد من أنّ اللاعب المحلي قد سجّل الدخول باستخدام "مركز الألعاب" سجِّل دخول اللاعب إلى لعبتك من خلال إنشاء عنصر 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 للمستخدم من كائن 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 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;
}