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ć.
- Po otwarciu projektu aplikacji przejdź w Xcode do File > Add Packages (Plik > Dodaj pakiety).
- Gdy pojawi się prośba, dodaj repozytorium SDK platform Apple Platform SDK Firebase:
- Wybierz bibliotekę uwierzytelniania Firebase.
- Dodaj flagę
-ObjC
do sekcji Inne flagi łączące w ustawieniach kompilacji celu. - Po zakończeniu Xcode automatycznie rozpocznie rozpoznawanie i pobieranie zależności w tle.
https://github.com/firebase/firebase-ios-sdk.git
Następnie wykonaj kilka czynności konfiguracyjnych:
- 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ć.
- Włącz Game Center jako dostawcę logowania w projekcie Firebase:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- 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; }