S'authentifier dans Game Center

Vous pouvez utiliser Game Center pour connecter les joueurs à un jeu sur les plates-formes Apple créé avec Firebase. À utilisez Game Center Sign-In avec Firebase, assurez-vous d'abord que le joueur local est connecté à Game Center, puis utiliser 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.

  1. Dans Xcode, à partir de votre projet d'application ouvert, accédez à File > Add Packages (Fichier > Ajouter des packages).
  2. Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase pour Apple :
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Choisissez la bibliothèque Firebase Authentication.
  5. Ajoutez l'indicateur -ObjC à la section Other Linker Flags (Autres indicateurs Linker) des paramètres de compilation de votre cible.
  6. Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.

Effectuez ensuite quelques étapes de configuration:

  1. Assurez-vous d'enregistrer votre application Apple auprès de Firebase. Cela signifie que vous devez saisir l'ID du bundle de l'application dans la section d'enregistrement, ainsi que d'autres telles que l'ID App Store et l'ID d'équipe. Cela est nécessaire pour vérifier de manière sécurisée l'audience des identifiants de l'utilisateur pour le Centre de jeux avant finalisant la connexion.
  2. Activez Game Center comme fournisseur de connexion pour votre projet Firebase :
    1. Dans la console Firebase, ouvrez la section Authentication (Authentification).
    2. Dans l'onglet Mode de connexion, activez le Centre de jeux. fournisseur de connexion.

Intégrer Game Center Sign-In à votre jeu

Tout d'abord, si votre jeu n'utilise pas encore Game Center, suivez les instructions de la section Intégrer Game Center à votre jeu et Authentifier un joueur local sur l'appareil sur le site pour les développeurs Apple.

Vérifiez que l'ID de bundle que vous fournissez à iTunes Connect correspond à l'ID de bundle que vous utilisé lorsque vous avez connecté votre application à votre projet Firebase.

Dans le cadre de l'intégration au Centre de jeux, vous définissez un gestionnaire d'authentification appelé à plusieurs étapes du processus d'authentification du Game Center. Dans ce gestionnaire, vérifiez si le joueur est connecté avec Game Center. Si c'est le cas, vous pouvez continuez à 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

Après avoir déterminé que le joueur local s'est connecté avec 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 ID 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 sur le joueur Game Center d'un utilisateur ou pour accéder aux services Game Center, utilisez les API fournies par Game Kit.

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;
}