المصادقة باستخدام Game Center

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

قبل ان تبدأ

استخدم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.

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

بعد ذلك، قم بتنفيذ بعض خطوات التكوين:

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

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

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

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

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

سويفت

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
  }
}

ج موضوعية

__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:) :

سويفت

// 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!
  }

ج موضوعية

// 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 الخاص بك، ويمكن استخدامه لتحديد المستخدم عبر كل تطبيق في مشروعك.

في لعبتك، يمكنك الحصول على معرف Firebase UID الخاص بالمستخدم من كائن User :

سويفت

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
}

ج موضوعية

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 وقواعد أمان التخزين السحابي، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

للحصول على معلومات لاعب Game Center الخاص بالمستخدم أو للوصول إلى خدمات Game Center، استخدم واجهات برمجة التطبيقات التي توفرها Game Kit .

لتسجيل خروج مستخدم من Firebase، اتصل بـ Auth.signOut() :

سويفت

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}

ج موضوعية

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}