Sie können Game Center verwenden, um Spieler bei einem auf Firebase erstellten Apple-Plattformspiel anzumelden. Um die Game Center-Anmeldung mit Firebase zu verwenden, stellen Sie zunächst sicher, dass der lokale Player bei Game Center angemeldet ist, und verwenden Sie dann das GameCenterAuthProvider
-Objekt, um Firebase-Anmeldeinformationen zu generieren, die Sie zur Authentifizierung bei Firebase verwenden können.
Bevor Sie beginnen
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
- Navigieren Sie in Xcode bei geöffnetem App-Projekt zu File > Add Packages .
- Wenn Sie dazu aufgefordert werden, fügen Sie das Firebase Apple Platforms SDK-Repository hinzu:
- Wählen Sie die Firebase Authentication-Bibliothek.
- Fügen Sie das Flag
-ObjC
zum Abschnitt „Andere Linker-Flags“ der Build-Einstellungen Ihres Ziels hinzu. - Wenn Sie fertig sind, beginnt Xcode automatisch mit der Auflösung und dem Herunterladen Ihrer Abhängigkeiten im Hintergrund.
https://github.com/firebase/firebase-ios-sdk.git
Führen Sie als Nächstes einige Konfigurationsschritte durch:
- Stellen Sie sicher, dass Sie Ihre Apple-App bei Firebase registrieren. Dies bedeutet, dass Sie im Registrierungsabschnitt die Bundle-ID Ihrer App zusammen mit zusätzlichen optionalen Informationen wie App Store-ID und Team-ID usw. eingeben. Dies ist erforderlich, um die Zielgruppe der Game Center-Anmeldeinformationen des Benutzers sicher zu überprüfen, bevor die Anmeldung abgeschlossen wird.
- Aktivieren Sie Game Center als Anmeldeanbieter für Ihr Firebase-Projekt:
- Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung .
- Aktivieren Sie auf der Registerkarte Anmeldemethode den Game Center -Anmeldeanbieter.
Integrieren Sie die Game Center-Anmeldung in Ihr Spiel
Wenn Ihr Spiel Game Center noch nicht verwendet, befolgen Sie zunächst die Anweisungen unter „Game Center in Ihr Spiel integrieren“ und „Authentifizierung eines lokalen Spielers auf dem Gerät“ auf der Apple-Entwicklerseite.
Stellen Sie sicher, dass die Bundle-ID, die Sie iTunes Connect zur Verfügung stellen, mit der Bundle-ID übereinstimmt, die Sie verwendet haben, als Sie Ihre App mit Ihrem Firebase-Projekt verbunden haben.
Im Rahmen Ihrer Game Center-Integration definieren Sie einen Authentifizierungshandler, der an mehreren Stellen im Game Center-Authentifizierungsprozess aufgerufen wird. Überprüfen Sie in diesem Handler, ob der Spieler beim Game Center angemeldet ist. Wenn ja, können Sie sich weiterhin bei Firebase anmelden.
Schnell
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 } }
Ziel 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 } };
Authentifizieren Sie sich mit Firebase
Nachdem Sie festgestellt haben, dass sich der lokale Spieler bei Game Center angemeldet hat, melden Sie den Spieler bei Ihrem Spiel an, indem Sie mit GameCenterAuthProvider.getCredential()
ein AuthCredential
Objekt erstellen und dieses Objekt an signIn(with:)
übergeben:
Schnell
// 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! }
Ziel 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. }]; } }];
Nächste Schritte
Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit seiner Game Center-ID verknüpft. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann zur Identifizierung eines Benutzers in jeder App in Ihrem Projekt verwendet werden.
In Ihrem Spiel können Sie die Firebase-UID des Benutzers aus dem User
abrufen:
Schnell
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 }
Ziel 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; }
In Ihren Firebase-Echtzeitdatenbank- und Cloud-Speicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth
abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.
Um die Game Center-Spielerinformationen eines Benutzers abzurufen oder auf Game Center-Dienste zuzugreifen, verwenden Sie die von Game Kit bereitgestellten APIs.
Um einen Benutzer von Firebase abzumelden, rufen Sie Auth.signOut()
auf:
Schnell
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print ("Error signing out: %@", signOutError) }
Ziel c
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }