Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

S'authentifier à l'aide de Game Center

Vous pouvez utiliser Game Center pour connecter les joueurs à un jeu iOS basé sur Firebase. Pour utiliser la connexion Game Center avec Firebase, assurez-vous d'abord que le joueur local est connecté avec Game Center, puis utilisez l'objet GameCenterAuthProvider pour générer des informations d'identification Firebase, que vous pouvez utiliser pour vous authentifier avec Firebase.

Avant que tu commences

  1. Ajoutez Firebase à votre projet iOS .

    Assurez-vous d'inclure le pod suivant dans votre Podfile:

    pod 'Firebase/Auth'
    

    Assurez-vous d'enregistrer votre application iOS avec Firebase. Cela signifie entrer l'ID de l'offre groupée de votre application dans la section d'inscription iOS avec des informations facultatives supplémentaires telles que l'ID App Store et l'ID d'équipe, etc. Cela sera nécessaire pour vérifier en toute sécurité l'audience des informations d'identification Game Center de l'utilisateur avant de terminer la connexion.

  2. Si vous n'avez pas encore connecté votre application à votre projet Firebase, faites-le depuis la console Firebase .

  3. Activez Game Center en tant que fournisseur de connexion pour votre projet Firebase:
    1. Dans la console Firebase , ouvrez la section Authentification .
    2. Dans l'onglet Méthode de connexion, activez le fournisseur de connexion Game Center .

Intégrez la connexion Game Center à votre jeu

Tout d'abord, si votre jeu n'utilise pas déjà Game Center, suivez les instructions dans Intégration de Game Center dans votre jeu et Authentification d'un joueur local sur l'appareil sur le site des développeurs Apple.

Assurez-vous que l'ID de bundle que vous fournissez à iTunes Connect correspond à l'ID de bundle que vous avez utilisé lorsque vous avez connecté 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é avec Game Center. Si tel est le cas, vous pouvez continuer à vous connecter à Firebase.

Rapide

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

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

Authentifiez-vous 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:) :

Rapide

// 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!
  }

Objectif 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.
    }];
  }
}];

Prochaines étapes

Lorsqu'un utilisateur se connecte pour la première fois, un nouveau compte utilisateur est créé et lié à son identifiant Game Center. Ce nouveau compte est stocké dans le cadre de votre projet Firebase et peut être utilisé pour identifier un utilisateur dans chaque application de votre projet.

Dans votre jeu, vous pouvez obtenir l'UID Firebase de l' User partir de l'objet User :

Rapide

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
}

Objectif 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 des 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() :

Rapide

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}

Objectif c

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}