Game Center를 사용하여 Firebase 기반으로 개발된 Apple 플랫폼 게임에 플레이어가 로그인하도록 할 수 있습니다. Game Center를 사용하여 Firebase에 로그인하려면 우선 로컬 플레이어가 Game Center에 로그인했는지 확인한 다음 GameCenterAuthProvider 객체를 사용하여 Firebase 사용자 인증 정보를 생성합니다. 이 인증 정보를 사용하여 Firebase에 인증할 수 있습니다.
시작하기 전에
Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.
앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.
그런 다음 몇 가지 구성 단계를 따릅니다.
Firebase로 Apple 앱을 등록해야 합니다. 즉, 앱의 번들 ID를 App Store ID 및 팀 ID 등과 같은 선택적인 추가 정보와 함께 등록 섹션에 입력합니다. 이 정보는 로그인을 완료하기 전에 Game Center 사용자 인증 정보의 잠재고객을 안전하게 확인하는 데 필요합니다.
iTunes Connect에 제공하는 번들 ID가 Firebase 프로젝트에 앱을 연결할 때 사용한 번들 ID와 일치하는지 확인합니다.
Game Center 통합의 일부로 Game Center 인증 프로세스의 여러 지점에서 호출되는 인증 핸들러를 정의합니다. 이 핸들러에서 플레이어가 Game Center로 로그인했는지 확인합니다. 그런 경우 계속해서 Firebase에 로그인할 수 있습니다.
Swift
letlocalPlayer=GKLocalPlayer.localPlayer()localPlayer.authenticateHandler={(gcAuthViewController?,error)inifletgcAuthViewController=gcAuthViewController{// Pause any activities that require user interaction, then present the// gcAuthViewController to the player.}elseiflocalPlayer.isAuthenticated{// Player is signed in to Game Center. Get Firebase credentials from the// player's Game Center credentials (see below).}else{// Error}}
Objective-C
__weakGKLocalPlayer*localPlayer=[GKLocalPlayerlocalPlayer];localPlayer.authenticateHandler=^(UIViewController*gcAuthViewController,NSError*error){if(gcAuthViewController!=nil){// Pause any activities that require user interaction, then present the// gcAuthViewController to the player.}elseif(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 credentialsGameCenterAuthProvider.getCredential(){(credential,error)inifleterror=error{return}// The credential can be used to sign in, or re-auth, or link or unlink.Auth.auth().signIn(with:credential){(user,error)inifleterror=error{return}// Player is signed in!}
Objective-C
// Get Firebase credentials from the player's Game Center credentials[FIRGameCenterAuthProvidergetCredentialWithCompletion:^(FIRAuthCredential*credential,NSError*error){// The credential can be used to sign in, or re-auth, or link or unlink.if(error==nil){[[FIRAuthauth]signInWithCredential:credentialcompletion:^(FIRUser*user,NSError*error){// If error is nil, player is signed in.}];}}];
다음 단계
사용자가 처음으로 로그인하면 신규 사용자 계정이 생성되어 사용자의 Game Center ID에 연결됩니다. 이 신규 계정은 Firebase 프로젝트에 저장되며 프로젝트의 모든 앱에서 사용자 본인 확인에 사용할 수 있습니다.
게임에서 User 객체로부터 사용자의 Firebase UID를 가져올 수 있습니다.
Swift
letuser=Auth.auth().currentUserifletuser=user{letplayerName=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.letuid=user.uid}
Objective-C
FIRUser*user=[FIRAuthauth].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를 사용하세요.
[null,null,["최종 업데이트: 2025-08-16(UTC)"],[],[],null,["You can use Game Center to sign players in to an Apple platforms game built on Firebase. To\nuse Game Center Sign-in with Firebase, first make sure the local player is\nsigned in with Game Center, and then use the `GameCenterAuthProvider` object to\ngenerate a Firebase credential, which you can use to authenticate with Firebase.\n\nBefore you begin\n\nUse Swift Package Manager to install and manage Firebase dependencies.\n| Visit [our installation guide](/docs/ios/installation-methods) to learn about the different ways you can add Firebase SDKs to your Apple project, including importing frameworks directly and using CocoaPods.\n\n1. In Xcode, with your app project open, navigate to **File \\\u003e Add Packages**.\n2. When prompted, add the Firebase Apple platforms SDK repository: \n\n```text\n https://github.com/firebase/firebase-ios-sdk.git\n```\n| **Note:** New projects should use the default (latest) SDK version, but you can choose an older version if needed.\n3. Choose the Firebase Authentication library.\n4. Add the `-ObjC` flag to the *Other Linker Flags* section of your target's build settings.\n5. When finished, Xcode will automatically begin resolving and downloading your dependencies in the background.\n\n| **Deprecated:** Apple has [deprecated the `playerID` field](https://developer.apple.com/documentation/gamekit/gkplayer/1521127-playerid/). The Firebase Apple platforms SDK will use `gamePlayerID` and `teamPlayerID` from version 10.5.0 and onwards. Upgrading to SDK version 10.5.0 or later updates existing integrations that use `playerID` to instead use `gamePlayerID` and `teamPlayerID`. Upgrading existing Game Center Sign-in integrations to SDK version 10.5.0 or later is irreversible. For more details, see [Method: accounts.signInWithGameCenter](https://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts/signInWithGameCenter).\n\nNext, perform some configuration steps:\n\n1. Make sure you register your Apple app with Firebase. This means entering your app's bundle ID in the registration section along with additional optional information such as App Store ID and Team ID, etc. This will be required for securely verifying the audience of the user's Game Center credential before completing sign-in.\n2. Enable Game Center as a sign-in provider for your Firebase project:\n 1. In the [Firebase console](//console.firebase.google.com/), open the **Authentication** section.\n 2. On the **Sign in method** tab, enable the **Game Center** sign-in provider.\n\nIntegrate Game Center Sign-in into your game\n\nFirst, if your game doesn't already use Game Center, follow the instructions in\n[Incorporating Game Center into Your Game](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameCenterOverview/GameCenterOverview.html#//apple_ref/doc/uid/TP40008304-CH5-SW22) and\n[Authenticating a Local Player on the Device](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Users/Users.html#//apple_ref/doc/uid/TP40008304-CH8-SW19) on the Apple\ndeveloper site.\n\nBe sure the bundle ID you provide to iTunes Connect matches the bundle ID you\nused when you connected your app to your Firebase project.\n\nAs part of your Game Center integration, you define an authentication handler\nthat is called at multiple points in the Game Center authentication process. In\nthis handler, check if the player is signed in with Game Center. If so, you can\ncontinue to sign in to Firebase. \n\nSwift \n\n```swift\nlet localPlayer = GKLocalPlayer.localPlayer()\nlocalPlayer.authenticateHandler = { (gcAuthViewController?, error) in\n if let gcAuthViewController = gcAuthViewController {\n // Pause any activities that require user interaction, then present the\n // gcAuthViewController to the player.\n } else if localPlayer.isAuthenticated {\n // Player is signed in to Game Center. Get Firebase credentials from the\n // player's Game Center credentials (see below).\n } else {\n // Error\n }\n}\n```\n\nObjective-C \n\n```objective-c\n__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];\nlocalPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController,\n NSError *error) {\n if (gcAuthViewController != nil) {\n // Pause any activities that require user interaction, then present the\n // gcAuthViewController to the player.\n } else if (localPlayer.isAuthenticated) {\n // Player is signed in to Game Center. Get Firebase credentials from the\n // player's Game Center credentials (see below).\n } else {\n // Error\n }\n};\n```\n\nAuthenticate with Firebase\n\nAfter you determine that the local player has signed in with Game Center,\nsign the player in to your game by creating an `AuthCredential` object with\n`GameCenterAuthProvider.getCredential()` and passing that object to\n`signIn(with:)`: \n\nSwift \n\n```swift\n// Get Firebase credentials from the player's Game Center credentials\nGameCenterAuthProvider.getCredential() { (credential, error) in\n if let error = error {\n return\n }\n // The credential can be used to sign in, or re-auth, or link or unlink.\n Auth.auth().signIn(with:credential) { (user, error) in\n if let error = error {\n return\n }\n // Player is signed in!\n }\n```\n\nObjective-C \n\n```objective-c\n// Get Firebase credentials from the player's Game Center credentials\n[FIRGameCenterAuthProvider getCredentialWithCompletion:^(FIRAuthCredential *credential,\n NSError *error) {\n // The credential can be used to sign in, or re-auth, or link or unlink.\n if (error == nil) {\n [[FIRAuth auth] signInWithCredential:credential\n completion:^(FIRUser *user, NSError *error) {\n // If error is nil, player is signed in.\n }];\n }\n}];\n```\n\nNext steps\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to their Game Center ID. This new account is stored as part of your\nFirebase project, and can be used to identify a user across every app in your\nproject.\n\nIn your game, you can get the user's Firebase UID from the `User` object: \n\nSwift \n\n```swift\nlet user = Auth.auth().currentUser\nif let user = user {\n let playerName = user.displayName\n\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use getToken(with:) instead.\n let uid = user.uid\n}\n```\n\nObjective-C \n\n```objective-c\nFIRUser *user = [FIRAuth auth].currentUser;\nif (user) {\n NSString *playerName = user.displayName;\n\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use getTokenWithCompletion:completion: instead.\n NSString *uid = user.uid;\n}\n```\n\nIn your Firebase Realtime Database and Cloud Storage Security Rules, you can get\nthe signed-in user's unique user ID from the `auth` variable, and use it to\ncontrol what data a user can access.\n\nTo get a user's Game Center player information or to access Game Center\nservices, use the APIs provided by [Game Kit](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Introduction/Introduction.html).\n\nTo sign a user out of Firebase, call `Auth.signOut()`: \n\nSwift \n\n```swift\nlet firebaseAuth = Auth.auth()\ndo {\n try firebaseAuth.signOut()\n} catch let signOutError as NSError {\n print (\"Error signing out: %@\", signOutError)\n}\n```\n\nObjective-C \n\n```objective-c\nNSError *signOutError;\nBOOL status = [[FIRAuth auth] signOut:&signOutError];\nif (!status) {\n NSLog(@\"Error signing out: %@\", signOutError);\n return;\n}\n```"]]