Autentica mediante Game Center

Puedes usar Game Center a fin de que los usuarios accedan a un juego para iOS compilado con Firebase. Si quieres usar el acceso mediante Game Center con Firebase, primero asegúrate de que el jugador local haya accedido a Game Center y, luego, usa el objeto GameCenterAuthProvider a fin de generar una credencial de Firebase, que puedes usar para autenticar con la plataforma.

Antes de comenzar

  1. Agrega Firebase al proyecto de iOS.

    No olvides incluir el siguiente pod en el Podfile:

    pod 'Firebase/Auth'
    
  2. Si aún no has conectado la app al proyecto de Firebase, puedes hacerlo desde Firebase console.

  3. Habilita Game Center como proveedor de acceso para tu proyecto de Firebase de la siguiente manera:
    1. En Firebase console, abre la sección Authentication.
    2. En la pestaña Método de acceso, habilita el proveedor de acceso de Game Center.

Integra el acceso mediante Game Center en tu juego

Primero, si tu juego todavía no usa Game Center, sigue las instrucciones de los artículos Incorpora Game Center en tu juego y Autentica un jugador local en el dispositivo del sitio para desarrolladores de Apple.

Asegúrate de que el ID del paquete que proporciones a iTunes Connect coincida con el que usaste para conectar tu app con el proyecto de Firebase.

Como parte de la integración en Game Center, debes definir un controlador de autenticación al que se realizan llamadas en varias etapas del proceso de autenticación de Game Center. En este controlador, verifica que el jugador haya accedido con Game Center. Si lo hizo, puedes continuar con el acceso 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
  }
};

Autentica con Firebase

Tras confirmar que el jugador local haya accedido con Game Center, haz que acceda a tu juego. Para ello, crea un objeto AuthCredential mediante el método GameCenterAuthProvider.getCredential() y, a continuación, pásalo a signIn(with:) como en estos ejemplos:

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

Pasos siguientes

Cuando un usuario accede por primera vez, se crea una cuenta de usuario nueva y se vincula con su ID de Game Center. Esta cuenta nueva se almacena como parte de tu proyecto de Firebase y se puede usar para identificar a un usuario en todas las apps del proyecto.

En tu juego, puedes obtener el UID de Firebase del usuario desde el objeto User, como en los siguientes ejemplos:

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

En las reglas de seguridad de Cloud Storage y de Firebase Realtime Database, puedes obtener el ID del usuario único que accedió a partir de la variable auth y usarlo para controlar los datos a los que tiene acceso ese usuario.

Para obtener la información de jugador de Game Center de un usuario o acceder a los servicios de Game Center, usa las API de Game Kit.

Para hacer que el usuario salga de Firebase, llama al método Auth.signOut() de las siguientes maneras:

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

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.