Вы можете использовать Game Center для входа игроков в игру для платформы Apple, созданную на базе Firebase. Чтобы использовать вход в Game Center с Firebase, сначала убедитесь, что локальный игрок выполнил вход в Game Center, а затем используйте объект GameCenterAuthProvider
для создания учетных данных Firebase, которые вы можете использовать для аутентификации в Firebase.
Прежде чем начать
Используйте Swift Package Manager для установки зависимостей Firebase и управления ими.
- В Xcode, открыв проект приложения, выберите «Файл» > «Добавить пакеты» .
- При появлении запроса добавьте репозиторий Firebase SDK для платформ Apple:
- Выберите библиотеку Firebase Authentication .
- Добавьте флаг
-ObjC
в раздел «Другие флаги компоновщика» настроек сборки вашей цели. - По завершении Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Далее выполните несколько шагов настройки:
- Обязательно зарегистрируйте свое приложение Apple в Firebase. Это означает ввод идентификатора пакета вашего приложения в разделе регистрации вместе с дополнительной дополнительной информацией, такой как идентификатор App Store, идентификатор команды и т. д. Это потребуется для безопасной проверки аудитории учетных данных пользователя Game Center перед завершением входа в систему.
- Включите Game Center в качестве поставщика услуг входа в ваш проект Firebase:
- В консоли Firebase откройте раздел Аутентификация .
- На вкладке «Метод входа» включите поставщика входа в Game Center .
Интегрируйте вход в Game Center в свою игру
Во-первых, если ваша игра еще не использует Game Center, следуйте инструкциям в разделе «Включение Game Center в вашу игру и аутентификация локального игрока на устройстве» на сайте разработчика Apple.
Убедитесь, что идентификатор пакета, который вы предоставляете iTunes Connect, соответствует идентификатору пакета, который вы использовали при подключении приложения к проекту Firebase.
В рамках интеграции 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, войдите в игру, создав объект AuthCredential
с помощью GameCenterAuthProvider.getCredential()
и передав этот объект в 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. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении вашего проекта.
В вашей игре вы можете получить UID пользователя Firebase из объекта User
:
Быстрый
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 Realtime и облачного хранилища вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Чтобы получить информацию об игроке Game Center пользователя или получить доступ к сервисам Game Center, используйте API, предоставляемые Game Kit .
Чтобы вывести пользователя из 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; }