Puoi utilizzare Game Center per far accedere i giocatori a un gioco per piattaforme Apple basato su Firebase. Per
utilizzare l'accesso con il Centro giochi con Firebase, assicurati innanzitutto che il
giocatore locale abbia eseguito l'accesso con il Centro giochi, quindi utilizza l'oggetto GameCenterAuthProvider
per
generare una credenziale Firebase, che potrai utilizzare per autenticarti 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 > Aggiungi pacchetti.
- Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
- Scegli la libreria Firebase Authentication.
- Aggiungi il flag
-ObjC
alla sezione Altri flag del linker delle impostazioni di compilazione del target. - Al termine, Xcode inizierà automaticamente a risolvere e scaricare il le dipendenze in background.
https://github.com/firebase/firebase-ios-sdk.git
A questo punto, svolgi alcuni passaggi di configurazione:
- Assicurati di registrare la tua app Apple in Firebase. Ciò significa che devi inserire l'ID pacchetto dell'app nella sezione di registrazione e altri facoltativi informazioni come ID App Store, ID team e così via. Sarà necessario per verificare in modo sicuro la credenziale del Centro giochi dell'utente prima completare l'accesso.
- Attiva Game Center come fornitore di accesso per il tuo progetto Firebase:
- Nella console Firebase, apri la sezione Autenticazione.
- Nella scheda Metodo di accesso, attiva il fornitore di accesso Game Center.
Integrare l'accesso tramite Game Center nel gioco
Innanzitutto, se il tuo gioco non utilizza già Game Center, segui le istruzioni riportate in Integrare Game Center nel gioco e Autenticare un giocatore locale sul dispositivo sul sito per sviluppatori Apple.
Assicurati che l'ID pacchetto fornito a iTunes Connect corrisponda all'ID pacchetto specificato utilizzata quando hai collegato la tua app al progetto Firebase.
Nell'ambito dell'integrazione di Game Center, definisci un gestore di autenticazione chiamato in più punti della procedura di autenticazione di Game Center. Nel questo gestore, controlla se il giocatore ha eseguito l'accesso con Game Center. In tal caso, puoi e continuare ad accedere a Firebase.
Swift
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 } }
Objective-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 } };
Esegui l'autenticazione con Firebase
Dopo aver verificato che il giocatore locale ha eseguito l'accesso al Game Center,
fai accedere il giocatore al tuo gioco creando un oggetto AuthCredential
con
GameCenterAuthProvider.getCredential()
e passare l'oggetto a
signIn(with:)
:
Swift
// 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! }
Objective-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. }]; } }];
Passaggi successivi
Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e collegato al proprio ID Game Center. Questo nuovo account viene archiviato nel progetto Firebase e può essere utilizzato per identificare un utente in ogni app del progetto.
Nel tuo gioco, puoi ottenere l'UID Firebase dell'utente dall'oggetto User
:
Swift
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 }
Objective-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; }
Nel tuo Firebase Realtime Database e le regole di sicurezza di Cloud Storage, puoi ottenere
l'ID utente unico dell'utente che ha eseguito l'accesso dalla variabile auth
e utilizzalo per
controllare a quali dati può accedere un utente.
Per ottenere le informazioni del giocatore di Game Center di un utente o per accedere ai servizi di Game Center, utilizza le API fornite da Game Kit.
Per far uscire un utente da Firebase, chiama Auth.signOut()
:
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }