קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
אפשר להשתמש ב-Game Center כדי להחתים שחקנים במשחק לפלטפורמות של אפל שנבנה על Firebase. כדי להשתמש בכניסה לחשבון Game Center עם Firebase, קודם צריך לוודא שהשחקן המקומי מחובר לחשבון Game Center, ואז להשתמש באובייקט GameCenterAuthProvider כדי ליצור אישור Firebase, שאפשר להשתמש בו לאימות ב-Firebase.
לפני שמתחילים
משתמשים ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.
ב-Xcode, כשהפרויקט של האפליקציה פתוח, עוברים אל File > Add Packages (קובץ > הוספת חבילות).
כשמוצגת בקשה, מוסיפים את מאגר Firebase Apple platforms SDK:
https://github.com/firebase/firebase-ios-sdk.git
בוחרים את הספרייה Firebase Authentication.
מוסיפים את הדגל -ObjC לקטע Other Linker Flags בהגדרות הבנייה של יעד הקישור.
אחרי שתסיימו, פלטפורמת Xcode תתחיל באופן אוטומטי לטפל ביחסי התלות ולהוריד אותם ברקע.
לאחר מכן, מבצעים כמה שלבי הגדרה:
חשוב לוודא שרשמתם את אפליקציית Apple ב-Firebase. כלומר, צריך להזין את מזהה החבילה של האפליקציה בקטע ההרשמה, יחד עם מידע אופציונלי נוסף כמו מזהה App Store ומזהה צוות וכו'. הפעולה הזו נדרשת כדי לאמת בצורה מאובטחת את קהל היעד של פרטי הכניסה של המשתמש ל-Game Center לפני השלמת הכניסה.
מפעילים את Game Center כספק כניסה לפרויקט Firebase:
חשוב לוודא שמזהה החבילה שציינתם ב-iTunes Connect זהה למזהה החבילה שבו השתמשתם כשקישרתם את האפליקציה לפרויקט Firebase.
כחלק מהשילוב של Game Center, מגדירים handler לאימות שמופעל בכמה נקודות בתהליך האימות של Game Center. ב-handler הזה, בודקים אם השחקן מחובר ל-Game Center. אם כן, אפשר להמשיך להיכנס ל-Firebase.
Swift
letlocalPlayer=GKLocalPlayer.localPlayer()localPlayer.authenticateHandler={(gcAuthViewController?,error)inifletgcAuthViewController=gcAuthViewController{// Pause any activities that require user interaction, then present the// gcAuthViewController to the player.}elseiflocalPlayer.isAuthenticated{// Player is signed in to Game Center. Get Firebase credentials from the// player's Game Center credentials (see below).}else{// Error}}
Objective-C
__weakGKLocalPlayer*localPlayer=[GKLocalPlayerlocalPlayer];localPlayer.authenticateHandler=^(UIViewController*gcAuthViewController,NSError*error){if(gcAuthViewController!=nil){// Pause any activities that require user interaction, then present the// gcAuthViewController to the player.}elseif(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:):
Swift
// Get Firebase credentials from the player's Game Center credentialsGameCenterAuthProvider.getCredential(){(credential,error)inifleterror=error{return}// The credential can be used to sign in, or re-auth, or link or unlink.Auth.auth().signIn(with:credential){(user,error)inifleterror=error{return}// Player is signed in!}
Objective-C
// Get Firebase credentials from the player's Game Center credentials[FIRGameCenterAuthProvidergetCredentialWithCompletion:^(FIRAuthCredential*credential,NSError*error){// The credential can be used to sign in, or re-auth, or link or unlink.if(error==nil){[[FIRAuthauth]signInWithCredential:credentialcompletion:^(FIRUser*user,NSError*error){// If error is nil, player is signed in.}];}}];
השלבים הבאים
אחרי שהמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר למזהה שלו ב-Game Center. החשבון החדש הזה נשמר כחלק מפרויקט Firebase, ואפשר להשתמש בו כדי לזהות משתמש בכל האפליקציות בפרויקט.
במשחק, אפשר לקבל את ה-UID של המשתמש ב-Firebase מאובייקט User:
Swift
letuser=Auth.auth().currentUserifletuser=user{letplayerName=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.letuid=user.uid}
Objective-C
FIRUser*user=[FIRAuthauth].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 ולהשתמש בו כדי לקבוע לאילו נתונים המשתמש יכול לגשת.
כדי לקבל מידע על שחקן ב-Game Center או לגשת לשירותים של Game Center, צריך להשתמש בממשקי ה-API שזמינים ב-Game Kit.
כדי להוציא משתמש מ-Firebase, קוראים ל-Auth.signOut():
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-09-04 (שעון UTC)."],[],[],null,["You can use Game Center to sign players in to an Apple platforms game built on Firebase. To\nuse Game Center Sign-in with Firebase, first make sure the local player is\nsigned in with Game Center, and then use the `GameCenterAuthProvider` object to\ngenerate a Firebase credential, which you can use to authenticate with Firebase.\n\nBefore you begin\n\nUse Swift Package Manager to install and manage Firebase dependencies.\n| Visit [our installation guide](/docs/ios/installation-methods) to learn about the different ways you can add Firebase SDKs to your Apple project, including importing frameworks directly and using CocoaPods.\n\n1. In Xcode, with your app project open, navigate to **File \\\u003e Add Packages**.\n2. When prompted, add the Firebase Apple platforms SDK repository: \n\n```text\n https://github.com/firebase/firebase-ios-sdk.git\n```\n| **Note:** New projects should use the default (latest) SDK version, but you can choose an older version if needed.\n3. Choose the Firebase Authentication library.\n4. Add the `-ObjC` flag to the *Other Linker Flags* section of your target's build settings.\n5. When finished, Xcode will automatically begin resolving and downloading your dependencies in the background.\n\n| **Deprecated:** Apple has [deprecated the `playerID` field](https://developer.apple.com/documentation/gamekit/gkplayer/1521127-playerid/). The Firebase Apple platforms SDK will use `gamePlayerID` and `teamPlayerID` from version 10.5.0 and onwards. Upgrading to SDK version 10.5.0 or later updates existing integrations that use `playerID` to instead use `gamePlayerID` and `teamPlayerID`. Upgrading existing Game Center Sign-in integrations to SDK version 10.5.0 or later is irreversible. For more details, see [Method: accounts.signInWithGameCenter](https://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts/signInWithGameCenter).\n\nNext, perform some configuration steps:\n\n1. Make sure you register your Apple app with Firebase. This means entering your app's bundle ID in the registration section along with additional optional information such as App Store ID and Team ID, etc. This will be required for securely verifying the audience of the user's Game Center credential before completing sign-in.\n2. Enable Game Center as a sign-in provider for your Firebase project:\n 1. In the [Firebase console](//console.firebase.google.com/), open the **Authentication** section.\n 2. On the **Sign in method** tab, enable the **Game Center** sign-in provider.\n\nIntegrate Game Center Sign-in into your game\n\nFirst, if your game doesn't already use Game Center, follow the instructions in\n[Incorporating Game Center into Your Game](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameCenterOverview/GameCenterOverview.html#//apple_ref/doc/uid/TP40008304-CH5-SW22) and\n[Authenticating a Local Player on the Device](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Users/Users.html#//apple_ref/doc/uid/TP40008304-CH8-SW19) on the Apple\ndeveloper site.\n\nBe sure the bundle ID you provide to iTunes Connect matches the bundle ID you\nused when you connected your app to your Firebase project.\n\nAs part of your Game Center integration, you define an authentication handler\nthat is called at multiple points in the Game Center authentication process. In\nthis handler, check if the player is signed in with Game Center. If so, you can\ncontinue to sign in to Firebase. \n\nSwift \n\n```swift\nlet localPlayer = GKLocalPlayer.localPlayer()\nlocalPlayer.authenticateHandler = { (gcAuthViewController?, error) in\n if let gcAuthViewController = gcAuthViewController {\n // Pause any activities that require user interaction, then present the\n // gcAuthViewController to the player.\n } else if localPlayer.isAuthenticated {\n // Player is signed in to Game Center. Get Firebase credentials from the\n // player's Game Center credentials (see below).\n } else {\n // Error\n }\n}\n```\n\nObjective-C \n\n```objective-c\n__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];\nlocalPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController,\n NSError *error) {\n if (gcAuthViewController != nil) {\n // Pause any activities that require user interaction, then present the\n // gcAuthViewController to the player.\n } else if (localPlayer.isAuthenticated) {\n // Player is signed in to Game Center. Get Firebase credentials from the\n // player's Game Center credentials (see below).\n } else {\n // Error\n }\n};\n```\n\nAuthenticate with Firebase\n\nAfter you determine that the local player has signed in with Game Center,\nsign the player in to your game by creating an `AuthCredential` object with\n`GameCenterAuthProvider.getCredential()` and passing that object to\n`signIn(with:)`: \n\nSwift \n\n```swift\n// Get Firebase credentials from the player's Game Center credentials\nGameCenterAuthProvider.getCredential() { (credential, error) in\n if let error = error {\n return\n }\n // The credential can be used to sign in, or re-auth, or link or unlink.\n Auth.auth().signIn(with:credential) { (user, error) in\n if let error = error {\n return\n }\n // Player is signed in!\n }\n```\n\nObjective-C \n\n```objective-c\n// Get Firebase credentials from the player's Game Center credentials\n[FIRGameCenterAuthProvider getCredentialWithCompletion:^(FIRAuthCredential *credential,\n NSError *error) {\n // The credential can be used to sign in, or re-auth, or link or unlink.\n if (error == nil) {\n [[FIRAuth auth] signInWithCredential:credential\n completion:^(FIRUser *user, NSError *error) {\n // If error is nil, player is signed in.\n }];\n }\n}];\n```\n\nNext steps\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to their Game Center ID. This new account is stored as part of your\nFirebase project, and can be used to identify a user across every app in your\nproject.\n\nIn your game, you can get the user's Firebase UID from the `User` object: \n\nSwift \n\n```swift\nlet user = Auth.auth().currentUser\nif let user = user {\n let playerName = user.displayName\n\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use getToken(with:) instead.\n let uid = user.uid\n}\n```\n\nObjective-C \n\n```objective-c\nFIRUser *user = [FIRAuth auth].currentUser;\nif (user) {\n NSString *playerName = user.displayName;\n\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use getTokenWithCompletion:completion: instead.\n NSString *uid = user.uid;\n}\n```\n\nIn your Firebase Realtime Database and Cloud Storage Security Rules, you can get\nthe signed-in user's unique user ID from the `auth` variable, and use it to\ncontrol what data a user can access.\n\nTo get a user's Game Center player information or to access Game Center\nservices, use the APIs provided by [Game Kit](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Introduction/Introduction.html).\n\nTo sign a user out of Firebase, call `Auth.signOut()`: \n\nSwift \n\n```swift\nlet firebaseAuth = Auth.auth()\ndo {\n try firebaseAuth.signOut()\n} catch let signOutError as NSError {\n print (\"Error signing out: %@\", signOutError)\n}\n```\n\nObjective-C \n\n```objective-c\nNSError *signOutError;\nBOOL status = [[FIRAuth auth] signOut:&signOutError];\nif (!status) {\n NSLog(@\"Error signing out: %@\", signOutError);\n return;\n}\n```"]]