Vous pouvez utiliser Game Center pour connecter les joueurs à un jeu pour les plates-formes Apple créé sur Firebase. Pour utiliser Game Center Sign-in avec Firebase, assurez-vous d'abord que le joueur local est connecté à Game Center, puis utilisez l'objet GameCenterAuthProvider
pour générer des identifiants Firebase, que vous pourrez utiliser pour vous authentifier auprès de Firebase.
Avant de commencer
Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.
- Dans Xcode, à partir de votre projet d'application ouvert, accédez à File > Add Packages (Fichier > Ajouter des packages).
- Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase pour Apple :
- Choisissez la bibliothèque Firebase Authentication.
- Ajoutez l'indicateur
-ObjC
à la section Other Linker Flags (Autres indicateurs Linker) des paramètres de compilation de votre cible. - Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.
https://github.com/firebase/firebase-ios-sdk.git
Ensuite, effectuez quelques étapes de configuration :
- Assurez-vous d'enregistrer votre application Apple auprès de Firebase. Cela signifie que vous devez saisir l'ID du bundle de votre application dans la section d'enregistrement, ainsi que d'autres informations facultatives telles que l'ID App Store et l'ID d'équipe, etc. Cela sera nécessaire pour vérifier de manière sécurisée l'audience des identifiants Game Center de l'utilisateur avant de finaliser la connexion.
- Activez Game Center comme fournisseur de connexion pour votre projet Firebase :
- Dans la console Firebase, ouvrez la section Authentification.
- Dans l'onglet Mode de connexion, activez le fournisseur de connexion Game Center.
Intégrer la connexion Game Center à votre jeu
Tout d'abord, si votre jeu n'utilise pas encore Game Center, suivez les instructions de Incorporating Game Center into Your Game (Intégrer Game Center à votre jeu) et Authenticating a Local Player on the Device (Authentifier un joueur local sur l'appareil) sur le site pour les développeurs Apple.
Assurez-vous que l'ID du bundle que vous fournissez à iTunes Connect correspond à celui que vous avez utilisé lorsque vous avez associé votre application à votre projet Firebase.
Dans le cadre de votre intégration Game Center, vous définissez un gestionnaire d'authentification qui est appelé à plusieurs moments du processus d'authentification Game Center. Dans ce gestionnaire, vérifiez si le joueur est connecté à Game Center. Si tel est le cas, vous pouvez continuer à vous connecter à 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 } };
S'authentifier avec Firebase
Une fois que vous avez déterminé que le joueur local s'est connecté à Game Center, connectez-le à votre jeu en créant un objet AuthCredential
avec GameCenterAuthProvider.getCredential()
et en transmettant cet objet à 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. }]; } }];
Étapes suivantes
Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associé à son identifiant Game Center. Ce nouveau compte est stocké dans votre projet Firebase et peut être utilisé pour identifier un utilisateur dans toutes les applications de votre projet.
Dans votre jeu, vous pouvez obtenir l'UID Firebase de l'utilisateur à partir de l'objet 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; }
Dans vos règles de sécurité Firebase Realtime Database et Cloud Storage, vous pouvez obtenir l'ID utilisateur unique de l'utilisateur connecté à partir de la variable auth
et l'utiliser pour contrôler les données auxquelles un utilisateur peut accéder.
Pour obtenir les informations d'un joueur Game Center ou accéder aux services Game Center, utilisez les API fournies par GameKit.
Pour déconnecter un utilisateur de Firebase, appelez 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; }