Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Puoi utilizzare Game Center per consentire ai giocatori di accedere a un gioco per piattaforme Apple creato su Firebase. Per
utilizzare l'accesso a Game Center con Firebase, assicurati innanzitutto che il giocatore locale abbia
eseguito l'accesso a Game Center, quindi utilizza l'oggetto GameCenterAuthProvider per
generare una credenziale Firebase, che puoi utilizzare per l'autenticazione con Firebase.
Prima di iniziare
Utilizza Swift Package Manager per installare e gestire le dipendenze di Firebase.
In Xcode, con il progetto dell'app aperto, vai a File > Add Packages (File > Aggiungi pacchetti).
Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
https://github.com/firebase/firebase-ios-sdk.git
Scegli la raccolta Firebase Authentication.
Aggiungi il flag -ObjC alla sezione Altri flag del linker delle impostazioni di build del target.
Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.
A questo punto, esegui alcuni passaggi di configurazione:
Assicurati di registrare la tua app Apple con Firebase. Ciò significa inserire l'ID bundle dell'app nella sezione di registrazione insieme a informazioni facoltative aggiuntive, come l'ID App Store e l'ID team. Questo passaggio è necessario per verificare in modo sicuro il pubblico delle credenziali Game Center dell'utente prima di completare l'accesso.
Attiva Game Center come provider di accesso per il tuo progetto Firebase:
Assicurati che l'ID bundle che fornisci a iTunes Connect corrisponda a quello che hai utilizzato quando hai connesso l'app al progetto Firebase.
Nell'ambito dell'integrazione di Game Center, definisci un gestore di autenticazione
che viene chiamato in più punti della procedura di autenticazione di Game Center. In
questo gestore, controlla se il giocatore ha eseguito l'accesso con Game Center. In questo caso, puoi
continuare ad accedere a 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}};
Autenticarsi con Firebase
Dopo aver stabilito che il giocatore locale ha eseguito l'accesso con Game Center,
accedi al gioco creando un oggetto AuthCredential con
GameCenterAuthProvider.getCredential() e passando l'oggetto a
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.}];}}];
Passaggi successivi
Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente
collegato al suo ID Game Center. Questo nuovo account viene memorizzato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del tuo progetto.
Nel tuo gioco, puoi ottenere l'UID Firebase dell'utente dall'oggetto 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;}
Nelle regole di sicurezza di Firebase Realtime Database e Cloud Storage, puoi ottenere
l'ID utente univoco dell'utente che ha eseguito l'accesso dalla variabile auth e utilizzarlo per
controllare a quali dati può accedere un utente.
Per ottenere le informazioni sul giocatore di Game Center di un utente o per accedere ai servizi di Game Center, utilizza le API fornite da Game Kit.
Per disconnettere un utente da Firebase, chiama Auth.signOut():
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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```"]]