Uwierzytelnij przez Game Center

Za pomocą Game Center możesz logować graczy w grach na platformach Apple utworzonych w Firebase. Aby korzystać z Logowania przez Centrum gier za pomocą Firebase, musisz najpierw zalogować się w Game Center, aby lokalny gracz zalogował się w Game Center, a potem za pomocą obiektu GameCenterAuthProvider wygenerować dane logowania Firebase, których możesz użyć do uwierzytelnienia w Firebase.

Zanim zaczniesz

Użyj menedżera pakietów Swift, aby zainstalować zależności Firebase i nimi zarządzać.

  1. Po otwarciu projektu aplikacji przejdź w Xcode do File > Add Packages (Plik > Dodaj pakiety).
  2. Gdy pojawi się prośba, dodaj repozytorium SDK platform Apple Platform SDK Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wybierz bibliotekę uwierzytelniania Firebase.
  5. Dodaj flagę -ObjC do sekcji Inne flagi łączące w ustawieniach kompilacji celu.
  6. Po zakończeniu Xcode automatycznie rozpocznie rozpoznawanie i pobieranie zależności w tle.

Następnie wykonaj kilka czynności konfiguracyjnych:

  1. Pamiętaj, aby zarejestrować swoją aplikację Apple w Firebase. Oznacza to, że w sekcji rejestracji wpisz identyfikator pakietu aplikacji wraz z dodatkowymi informacjami opcjonalnymi, takimi jak identyfikator App Store, identyfikator zespołu itp. Będzie on potrzebny do bezpiecznego weryfikowania odbiorców danych logowania w Centrum gier, zanim spróbujesz się zalogować.
  2. Włącz Game Center jako dostawcę logowania w projekcie Firebase:
    1. W konsoli Firebase otwórz sekcję Uwierzytelnianie.
    2. Na karcie Metoda logowania włącz dostawcę logowania Centrum gier.

Zintegruj logowanie przez Centrum gier ze swoją grą

Najpierw, jeśli Twoja gra nie korzysta jeszcze z Game Center, wykonaj czynności opisane w sekcjach Wdrażanie Game Center w grze i Uwierzytelnianie lokalnego gracza na urządzeniu na stronie dla deweloperów Apple.

Upewnij się, że identyfikator pakietu podany przez Ciebie w iTunes Connect jest zgodny z identyfikatorem pakietu użytym podczas łączenia aplikacji z projektem Firebase.

W ramach integracji z Game Center definiujesz moduł obsługi uwierzytelniania, który jest wywoływany w wielu punktach procesu uwierzytelniania w Game Center. W tym module obsługi sprawdź, czy gracz jest zalogowany w Game Center. Jeśli tak, możesz nadal logować się w Firebase.

Swift

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

Objective-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
  }
};

Uwierzytelnij za pomocą Firebase

Gdy ustalisz, że lokalny gracz zalogował się w Game Center, zaloguj go w grze, tworząc obiekt AuthCredential za pomocą GameCenterAuthProvider.getCredential() i przekazując go do signIn(with:):

Swift

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

Objective-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.
    }];
  }
}];

Dalsze kroki

Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika i łączone z jego identyfikatorem Game Center. Nowe konto będzie przechowywane w ramach Twojego projektu Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w Twoim projekcie.

W swojej grze możesz uzyskać identyfikator Firebase UID użytkownika z obiektu User:

Swift

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
}

Objective-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;
}

W Bazie danych czasu rzeczywistego Firebase i regułach zabezpieczeń Cloud Storage możesz uzyskać ze zmiennej auth unikalny identyfikator zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Aby uzyskać informacje o odtwarzaczu Game Center użytkownika lub uzyskać dostęp do usług Game Center, użyj interfejsów API udostępnionych przez Game Kit.

Aby wylogować użytkownika z Firebase, wywołaj Auth.signOut():

Swift

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

Objective-C

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