میتوانید از Game Center برای ورود بازیکنان به یک بازی پلتفرم Apple ساختهشده در Firebase استفاده کنید. برای استفاده از Game Center Sign-in با Firebase، ابتدا مطمئن شوید که پخش کننده محلی با Game Center وارد شده است و سپس از شی GameCenterAuthProvider
برای ایجاد یک اعتبار Firebase استفاده کنید، که می توانید از آن برای احراز هویت با Firebase استفاده کنید.
برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
- هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjC
را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.
https://github.com/firebase/firebase-ios-sdk.git
در مرحله بعد، چند مرحله پیکربندی را انجام دهید:
- مطمئن شوید که برنامه Apple خود را در Firebase ثبت کرده اید. این به این معنی است که شناسه بسته نرم افزاری خود را در بخش ثبت نام به همراه اطلاعات اختیاری اضافی مانند شناسه فروشگاه App و شناسه تیم و غیره وارد کنید. این برای تأیید ایمن اعتبارسنجی مرکز بازی کاربر قبل از تکمیل ورود به سیستم، لازم است.
- Game Center را به عنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
- در کنسول Firebase ، بخش Authentication را باز کنید.
- در برگه روش ورود به سیستم ، ارائه دهنده ورود به سیستم 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 } }
__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 } };
بعد از اینکه متوجه شدید که بازیکن محلی با 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. }]; } }];
پس از اینکه یک کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد می شود و به شناسه مرکز بازی او مرتبط می شود. این حساب جدید به عنوان بخشی از پروژه 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 }
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) }
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }