با استفاده از Game Center احراز هویت

می‌توانید از Game Center برای ورود بازیکنان به یک بازی پلتفرم Apple ساخته‌شده در Firebase استفاده کنید. برای استفاده از Game Center Sign-in با Firebase، ابتدا مطمئن شوید که پخش کننده محلی با Game Center وارد شده است و سپس از شی GameCenterAuthProvider برای ایجاد یک اعتبار Firebase استفاده کنید، که می توانید از آن برای احراز هویت با Firebase استفاده کنید.

قبل از شروع

برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.

  1. در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
  2. هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. کتابخانه Firebase Authentication را انتخاب کنید.
  5. پرچم -ObjC را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید.
  6. پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.

در مرحله بعد، چند مرحله پیکربندی را انجام دهید:

  1. مطمئن شوید که برنامه Apple خود را در Firebase ثبت کرده اید. این به این معنی است که شناسه بسته نرم افزاری خود را در بخش ثبت نام به همراه اطلاعات اختیاری اضافی مانند شناسه فروشگاه App و شناسه تیم و غیره وارد کنید. این برای تأیید ایمن اعتبارسنجی مرکز بازی کاربر قبل از تکمیل ورود به سیستم، لازم است.
  2. Game Center را به عنوان ارائه‌دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
    1. در کنسول Firebase ، بخش Authentication را باز کنید.
    2. در برگه روش ورود به سیستم ، ارائه دهنده ورود به سیستم Game Center را فعال کنید.
ورود به سیستم Game Center را در بازی خود ادغام کنید

ابتدا، اگر بازی شما قبلاً از Game Center استفاده نمی‌کند، دستورالعمل‌های Incorporating Game Center در بازی خود و تأیید اعتبار یک پخش کننده محلی در دستگاه را در سایت توسعه‌دهنده اپل دنبال کنید.

مطمئن شوید که شناسه بسته‌ای که به iTunes Connect ارائه می‌دهید با شناسه بسته‌ای که هنگام اتصال برنامه خود به پروژه Firebase استفاده کرده‌اید، مطابقت دارد.

به عنوان بخشی از ادغام مرکز بازی خود، یک کنترل کننده احراز هویت را تعریف می کنید که در چندین نقطه در فرآیند احراز هویت مرکز بازی فراخوانی می شود. در این کنترلر، بررسی کنید که آیا بازیکن با 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
  }
}
هدف-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:) وارد بازی خود کنید:

سویفت
// 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!
  }
هدف-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 شما ذخیره می‌شود و می‌تواند برای شناسایی کاربر در هر برنامه در پروژه شما استفاده شود.

در بازی خود، می توانید UID Firebase کاربر را از شی 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
}
هدف-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 دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن دسترسی داشته باشد استفاده کنید.

برای دریافت اطلاعات پخش کننده مرکز بازی کاربر یا دسترسی به خدمات مرکز بازی، از API های ارائه شده توسط Game Kit استفاده کنید.

برای خروج کاربر از Firebase، با Auth.signOut() تماس بگیرید:

سویفت
let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}
هدف-C
NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}