Za pomocą Game Center możesz logować graczy do gier platformowych Apple opartych na Firebase. Aby korzystać z logowania do Game Center w Firebase, najpierw upewnij się, że lokalny gracz jest zalogowany w Game Center, a następnie użyj obiektu GameCenterAuthProvider
do wygenerowania danych uwierzytelniających Firebase, których możesz użyć do uwierzytelnienia w Firebase.
Zanim zaczniesz
Użyj Menedżera pakietów Swift, aby zainstalować i zarządzać zależnościami Firebase.
- W Xcode przy otwartym projekcie aplikacji przejdź do File > Add Packages .
- Po wyświetleniu monitu dodaj repozytorium Firebase Apple platforms SDK:
- Wybierz bibliotekę uwierzytelniania Firebase.
- Po zakończeniu Xcode automatycznie rozpocznie rozwiązywanie i pobieranie zależności w tle.
https://github.com/firebase/firebase-ios-sdk
Następnie wykonaj kilka kroków konfiguracyjnych:
- Upewnij się, że zarejestrowałeś swoją aplikację Apple w Firebase. Oznacza to wprowadzenie identyfikatora pakietu aplikacji w sekcji rejestracji wraz z dodatkowymi opcjonalnymi informacjami, takimi jak identyfikator App Store i identyfikator zespołu itp. Będzie to wymagane do bezpiecznej weryfikacji danych logowania użytkownika Game Center przed zakończeniem logowania.
- Włącz Game Center jako dostawcę logowania dla swojego projektu Firebase:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie .
- Na karcie Metoda logowania włącz dostawcę logowania Game Center .
Zintegruj logowanie do Game Center ze swoją grą
Po pierwsze, jeśli Twoja gra nie korzysta jeszcze z Game Center, postępuj zgodnie z instrukcjami zawartymi w artykule Włączanie Game Center do gry i Uwierzytelnianie lokalnego gracza na urządzeniu w witrynie Apple dla deweloperów.
Upewnij się, że identyfikator pakietu podany w iTunes Connect jest zgodny z identyfikatorem pakietu użytym podczas łączenia aplikacji z projektem Firebase.
W ramach integracji Game Center definiujesz program obsługi uwierzytelniania, który jest wywoływany w wielu punktach procesu uwierzytelniania Game Center. W tym programie obsługi sprawdź, czy gracz jest zalogowany w Game Center. Jeśli tak, możesz nadal logować się do Firebase.
Szybki
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 } }
Cel 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 w Firebase
Po ustaleniu, że lokalny gracz zalogował się w Game Center, zaloguj go do swojej gry, tworząc obiekt AuthCredential
za pomocą GameCenterAuthProvider.getCredential()
i przekazując ten obiekt do signIn(with:)
:
Szybki
// 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! }
Cel 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. }]; } }];
Następne kroki
Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z jego identyfikatorem Game Center. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikacji użytkownika w każdej aplikacji w Twoim projekcie.
W swojej grze możesz uzyskać UID Firebase użytkownika z obiektu User
:
Szybki
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 }
Cel 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 Regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth
i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Aby uzyskać informacje o graczu Game Center użytkownika lub uzyskać dostęp do usług Game Center, użyj interfejsów API dostarczonych przez Game Kit .
Aby wylogować użytkownika z Firebase, wywołaj Auth.signOut()
:
Szybki
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) }
Cel C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }