Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Game Center를 사용하여 인증

Game Center를 사용하여 Firebase에 구축된 Apple 플랫폼 게임에 플레이어를 로그인시킬 수 있습니다. Firebase로 Game Center 로그인을 사용하려면 먼저 로컬 플레이어가 Game Center로 로그인했는지 확인한 다음 GameCenterAuthProvider 개체를 사용하여 Firebase 인증에 사용할 수 있는 Firebase 자격 증명을 생성합니다.

시작하기 전에

Swift Package Manager를 사용하여 Firebase 종속 항목을 설치하고 관리합니다.

  1. Xcode에서 앱 프로젝트를 연 상태에서 File > Add Packages 로 이동합니다.
  2. 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Firebase 인증 라이브러리를 선택합니다.
  5. 완료되면 Xcode는 자동으로 백그라운드에서 종속성을 해결하고 다운로드하기 시작합니다.

다음으로 몇 가지 구성 단계를 수행합니다.

  1. Firebase에 Apple 앱을 등록해야 합니다. 이는 App Store ID 및 Team ID 등과 같은 추가 선택 정보와 함께 등록 섹션에 앱의 번들 ID를 입력하는 것을 의미합니다. 이는 로그인을 완료하기 전에 사용자의 Game Center 자격 증명 대상을 안전하게 확인하는 데 필요합니다.
  2. Firebase 프로젝트의 로그인 공급자로 Game Center를 활성화합니다.
    1. Firebase 콘솔 에서 인증 섹션을 엽니다.
    2. 로그인 방법 탭에서 Game Center 로그인 공급자를 활성화합니다.

게임에 Game Center 로그인 통합

먼저 게임에서 아직 Game Center를 사용하지 않는 경우 Apple 개발자 사이트에서 Game Center를 게임에 통합장치에서 로컬 플레이어 인증 의 지침을 따르십시오.

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

Game Center 통합의 일부로 Game Center 인증 프로세스의 여러 지점에서 호출되는 인증 핸들러를 정의합니다. 이 처리기에서 플레이어가 Game Center에 로그인되어 있는지 확인합니다. 그렇다면 Firebase에 계속 로그인할 수 있습니다.

빠른

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

__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:) 에 전달하여 플레이어를 게임에 로그인시킵니다.

빠른

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

// 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를 가져올 수 있습니다.

빠른

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

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를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 ​​데 사용할 수 있습니다.

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

Firebase에서 사용자를 로그아웃하려면 Auth.signOut() 을 호출합니다.

빠른

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

목표-C

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