Check out what’s new from Firebase at Google I/O 2022. Learn more

Authentifizieren Sie sich mit Game Center

Sie können Game Center verwenden, um Spieler bei einem Apple-Plattformspiel anzumelden, das auf Firebase basiert. Um die Game Center-Anmeldung mit Firebase zu verwenden, stellen Sie zunächst sicher, dass der lokale Spieler bei Game Center angemeldet ist, und verwenden Sie dann das GameCenterAuthProvider Objekt, um Firebase-Anmeldeinformationen zu generieren, mit denen Sie sich bei Firebase authentifizieren können.

Bevor Sie beginnen

Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.

  1. Navigieren Sie in Xcode bei geöffnetem App-Projekt zu File > Add Packages .
  2. Wenn Sie dazu aufgefordert werden, fügen Sie das Firebase Apple-Plattform-SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Wählen Sie die Firebase-Authentifizierungsbibliothek aus.
  5. Wenn Sie fertig sind, beginnt Xcode automatisch mit dem Auflösen und Herunterladen Ihrer Abhängigkeiten im Hintergrund.

Führen Sie als Nächstes einige Konfigurationsschritte durch:

  1. Stellen Sie sicher, dass Sie Ihre Apple-App bei Firebase registrieren. Das bedeutet, dass Sie die Bundle-ID Ihrer App im Registrierungsabschnitt 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 verifizieren, bevor die Anmeldung abgeschlossen wird.
  2. Aktivieren Sie Game Center als Anmeldeanbieter für Ihr Firebase-Projekt:
    1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung .
    2. 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 Einbinden von Game Center in Ihr Spiel und Authentifizieren eines lokalen Spielers auf dem Gerät auf der Apple-Entwickler-Website.

Stellen Sie sicher, dass die Bundle-ID, die Sie iTunes Connect bereitstellen, mit der Bundle-ID übereinstimmt, die Sie verwendet haben, als Sie Ihre App mit Ihrem Firebase-Projekt verbunden haben.

Als Teil Ihrer Game Center-Integration definieren Sie einen Authentifizierungs-Handler, der an mehreren Stellen im Game Center-Authentifizierungsprozess aufgerufen wird. Überprüfen Sie in diesem Handler, ob der Spieler bei Game Center angemeldet ist. In diesem Fall 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 ein AuthCredential -Objekt mit GameCenterAuthProvider.getCredential() und dieses Objekt an signIn(with:) :

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 verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren.

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 Cloudspeicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth -Variable abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Verwenden Sie die von Game Kit bereitgestellten APIs, um die Game Center-Spielerinformationen eines Benutzers abzurufen oder auf Game Center-Dienste zuzugreifen.

Um einen Benutzer von Firebase abzumelden, rufen Auth.signOut() :

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