Game Center를 사용하여 Firebase에 구축된 Apple 플랫폼 게임에 플레이어를 로그인시킬 수 있습니다. Firebase로 Game Center 로그인을 사용하려면 먼저 로컬 플레이어가 Game Center로 로그인했는지 확인한 다음 GameCenterAuthProvider
개체를 사용하여 Firebase 인증에 사용할 수 있는 Firebase 자격 증명을 생성합니다.
시작하기 전에
Swift Package Manager를 사용하여 Firebase 종속 항목을 설치하고 관리합니다.
- Xcode에서 앱 프로젝트를 연 상태에서 File > Add Packages 로 이동합니다.
- 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
- Firebase 인증 라이브러리를 선택합니다.
- 완료되면 Xcode는 자동으로 백그라운드에서 종속성을 해결하고 다운로드하기 시작합니다.
https://github.com/firebase/firebase-ios-sdk
다음으로 몇 가지 구성 단계를 수행합니다.
- Firebase에 Apple 앱을 등록해야 합니다. 이는 App Store ID 및 Team ID 등과 같은 추가 선택 정보와 함께 등록 섹션에 앱의 번들 ID를 입력하는 것을 의미합니다. 이는 로그인을 완료하기 전에 사용자의 Game Center 자격 증명 대상을 안전하게 확인하는 데 필요합니다.
- Firebase 프로젝트의 로그인 공급자로 Game Center를 활성화합니다.
- Firebase 콘솔 에서 인증 섹션을 엽니다.
- 로그인 방법 탭에서 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; }