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

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

قبل ان تبدأ

  1. إضافة إلى Firebase المشروع الذي يعمل بنظام iOS .

  2. تأكد من تضمين الحجرة التالية في Podfile الخاص بك:

    pod 'Firebase/Auth'
    

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

  3. إذا لم تكن متصلا بعد تطبيقك لمشروع Firebase قم بذلك من وحدة التحكم Firebase .

  4. قم بتمكين Game Center كموفر تسجيل الدخول لمشروع Firebase الخاص بك:
    1. في وحدة التحكم Firebase ، فتح الباب المصادقة.
    2. على علامة التبويب تسجيل الدخول طريقة، تمكن مركز لعبة تسجيل الدخول الموفر.

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

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

تأكد من أن معرّف الحزمة الذي توفره لـ 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

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

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

التوقيع على المستخدم من 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;
}