Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Аутентификация с помощью Game Center

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Вы можете использовать Game Center для входа игроков в игру для платформ Apple, созданную на базе Firebase. Чтобы использовать вход в Game Center с Firebase, сначала убедитесь, что локальный игрок вошел в Game Center, а затем используйте объект GameCenterAuthProvider для создания учетных данных Firebase, которые можно использовать для аутентификации в Firebase.

Прежде чем вы начнете

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode при открытом проекте приложения перейдите в File > Add Packages .
  2. При появлении запроса добавьте репозиторий SDK Firebase для платформ Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Выберите библиотеку аутентификации Firebase.
  5. Когда закончите, Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.

Далее выполните несколько шагов настройки:

  1. Убедитесь, что вы зарегистрировали свое приложение Apple в Firebase. Это означает ввод идентификатора пакета вашего приложения в разделе регистрации вместе с дополнительной дополнительной информацией, такой как идентификатор App Store и идентификатор команды и т. д. Это потребуется для безопасной проверки аудитории учетных данных Game Center перед завершением входа.
  2. Включите Game Center в качестве провайдера входа для вашего проекта Firebase:
    1. В консоли Firebase откройте раздел Аутентификация .
    2. На вкладке « Метод входа » включите поставщика входа в 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 Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего пользователя из переменной 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;
}