Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Autenticar usando Game Center

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede usar Game Center para iniciar sesión en un juego de plataformas de Apple basado en Firebase. Para usar el inicio de sesión de Game Center con Firebase, primero asegúrese de que el jugador local haya iniciado sesión con Game Center y luego use el objeto GameCenterAuthProvider para generar una credencial de Firebase, que puede usar para autenticarse con Firebase.

Antes de que empieces

Use Swift Package Manager para instalar y administrar las dependencias de Firebase.

  1. En Xcode, con su proyecto de aplicación abierto, vaya a Archivo > Agregar paquetes .
  2. Cuando se le solicite, agregue el repositorio del SDK de las plataformas Apple de Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Elija la biblioteca de autenticación de Firebase.
  5. Cuando termine, Xcode comenzará a resolver y descargar automáticamente sus dependencias en segundo plano.

A continuación, realice algunos pasos de configuración:

  1. Asegúrate de registrar tu aplicación de Apple con Firebase. Esto significa ingresar la identificación del paquete de su aplicación en la sección de registro junto con información opcional adicional, como la identificación de la tienda de aplicaciones y la identificación del equipo, etc. Esto será necesario para verificar de manera segura la audiencia de la credencial de Game Center del usuario antes de completar el inicio de sesión.
  2. Habilite Game Center como proveedor de inicio de sesión para su proyecto de Firebase:
    1. En Firebase console , abra la sección Autenticación .
    2. En la pestaña Método de inicio de sesión, habilite el proveedor de inicio de sesión de Game Center .

Integre el inicio de sesión de Game Center en su juego

Primero, si su juego aún no usa Game Center, siga las instrucciones en Incorporación de Game Center en su juego y autenticación de un jugador local en el dispositivo en el sitio para desarrolladores de Apple.

Asegúrese de que el ID del paquete que proporcione a iTunes Connect coincida con el ID del paquete que utilizó cuando conectó su aplicación a su proyecto de Firebase.

Como parte de la integración de Game Center, define un controlador de autenticación que se llama en varios puntos del proceso de autenticación de Game Center. En este controlador, comprueba si el jugador ha iniciado sesión en Game Center. Si es así, puede continuar iniciando sesión en Firebase.

Rápido

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

C objetivo

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

Autenticar con Firebase

Después de determinar que el jugador local ha iniciado sesión en Game Center, inicie sesión en su juego creando un objeto AuthCredential con GameCenterAuthProvider.getCredential() y transfiriendo ese objeto a signIn(with:) :

Rápido

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

C objetivo

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

Próximos pasos

Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a su ID de Game Center. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto.

En su juego, puede obtener el UID de Firebase del User del objeto Usuario:

Rápido

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
}

C objetivo

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 sus Reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener la ID de usuario única del usuario que inició sesión de la variable de auth y usarla para controlar a qué datos puede acceder un usuario.

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

Para cerrar la sesión de un usuario en Firebase, llama a Auth.signOut() :

Rápido

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

C objetivo

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