Autenticar usando o Game Center

Use o Game Center para fazer login de jogadores em um jogo para iOS criado no Firebase. Para usar o login do Game Center com o Firebase, primeiro verifique se o jogador local está conectado no Game Center e use o objeto GameCenterAuthProvider para gerar uma credencial do Firebase, que pode ser usada na autenticação com o Firebase.

Antes de começar

  1. Adicione o Firebase ao projeto do iOS.

    Certifique-se de incluir o seguinte pod no seu Podfile:

    pod 'Firebase/Auth'
    
  2. Se você ainda não conectou o app ao projeto do Firebase, faça isso no Console do Firebase.

  3. Ative o Game Center como um provedor de login para seu projeto do Firebase:
    1. No Console do Firebase, abra a seção Authentication.
    2. Na guia Método de login, ative o provedor de entrada do Game Center.

Integrar o login do Game Center ao seu jogo

Primeiro, caso seu jogo ainda não use o Game Center, siga as instruções em Como incorporar o Game Center ao seu jogo e Como autenticar um jogador local no dispositivo (ambos em inglês) no site de desenvolvedores da Apple.

Verifique se o ID do pacote que você fornece ao iTunes Connect corresponde ao ID que você usou ao conectar seu aplicativo ao projeto do Firebase.

Como parte da integração do Game Center, você define um gerenciador de autenticação que é chamado em vários pontos no processo de autenticação do Game Center. Nele, verifique se o jogador está conectado ao Game Center. Em caso afirmativo, continue com o login no 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
  }
};

Autenticar no Firebase

Depois de determinar que o jogador local entrou no Game Center, faça o login dele no seu jogo ao criar um objeto AuthCredential com GameCenterAuthProvider.getCredential() e transmitir esse objeto para 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.
    }];
  }
}];

Próximas etapas

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada ao código do Game Center. Ela é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em cada app no seu projeto.

No seu jogo, é possível receber o UID do Firebase a partir do usuário do objeto 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;
}

Nas regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível usar a variável auth para acessar o código de usuário único das pessoas que fizeram login. Use essa informação para controlar quais dados os usuários podem acessar.

Para ver informações de um jogador do Game Center ou acessar os serviços do Game Center, use as APIs fornecidas pelo Game Kit (em inglês).

Para fazer login de um usuário fora do Firebase, chame 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;
}

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.