Game Center를 사용하여 인증하기

Game Center를 사용하여 Firebase 기반으로 개발된 iOS 게임에 플레이어가 로그인하도록 할 수 있습니다. Firebase를 통해 Game Center 로그인을 사용하려면 우선 로컬 플레이어가 Game Center로 로그인했는지 확인한 다음 GameCenterAuthProvider 객체를 사용하여 Firebase 사용자 인증 정보를 생성합니다. 이 인증 정보를 사용하여 Firebase에 인증할 수 있습니다.

시작하기 전에

  1. iOS 프로젝트에 Firebase를 추가합니다.

    Podfile에 다음 pod를 포함해야 합니다.

    pod 'Firebase/Auth'
    
  2. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase 콘솔에서 연결합니다.

  3. Game Center를 Firebase프로젝트의 로그인 제공업체로 사용 설정합니다.
    1. Firebase 콘솔에서 인증 섹션을 엽니다.
    2. 로그인 방법 탭에서 Game Center 로그인 제공업체를 사용 설정합니다.

게임에 Game Center 로그인 통합

먼저, 게임에서 아직 Game Center를 사용하지 않는 경우 Apple 개발자 사이트의 Incorporating Game Center into Your Game(Game Center를 게임에 통합)Authenticating a Local Player on the Device(기기에서 로컬 플레이어 인증) 안내를 따르세요.

iTunes Connect에 제공하는 번들 ID가 Firebase 프로젝트에 앱을 연결할 때 사용한 번들 ID와 일치하는지 확인합니다.

Game Center 통합의 일부로 Game Center 인증 프로세스의 여러 지점에서 호출되는 인증 핸들러를 정의합니다. 이 핸들러에서 플레이어가 Game Center로 로그인했는지 확인합니다. 그런 경우 계속해서 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
  }
};

Firebase로 인증하기

로컬 플레이어가 Game Center로 로그인했음을 확인한 후 GameCenterAuthProvider.getCredential()AuthCredential 객체를 만들고 이 객체를 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.
    }];
  }
}];

다음 단계

사용자가 처음으로 로그인하면 신규 사용자 계정이 생성되어 사용자의 Game Center ID에 연결됩니다. 이 신규 계정은 Firebase 프로젝트에 저장되며 프로젝트의 모든 앱에서 사용자 본인 확인에 사용할 수 있습니다.

게임에서 User 객체로부터 사용자의 Firebase UID를 가져올 수 있습니다.

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

Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙에서 auth 변수로부터 로그인한 사용자의 고유 사용자 ID를 가져온 후 이 ID를 통해 사용자의 데이터 액세스를 관리할 수 있습니다.

사용자의 Game Center 플레이어 정보를 가져오거나 Game Center 서비스에 액세스하려면 Game Kit에서 제공하는 API를 사용하세요.

Firebase에서 사용자를 로그아웃 처리하려면 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;
}

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.