Mit Game Center authentifizieren

Mit Game Center können Sie Spieler in einem Spiel für Apple-Plattformen anmelden, das auf Firebase basiert. Wenn Sie die Game Center-Anmeldung mit Firebase verwenden möchten, müssen Sie zuerst dafür sorgen, dass der lokale Spieler bei Game Center angemeldet ist. Anschließend können Sie mit dem GameCenterAuthProvider-Objekt Anmeldedaten für Firebase generieren, mit denen Sie sich bei Firebase authentifizieren können.

Hinweis

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

  1. Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Add Packages (Datei > Pakete hinzufügen).
  2. Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wählen Sie die Firebase Authentication-Bibliothek aus.
  5. Fügen Sie das Flag -ObjC dem Abschnitt Other Linker Flags (Weitere Linker-Flags) der Build-Einstellungen Ihres Ziels hinzu.
  6. Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.

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

  1. Registrieren Sie Ihre Apple-App bei Firebase. Das bedeutet, dass Sie im Registrierungsbereich die Bundle-ID Ihrer App sowie zusätzliche optionale Informationen wie die App Store-ID und die Team-ID eingeben müssen. Dies ist erforderlich, um die Zielgruppe der Game Center-Anmeldedaten des Nutzers vor Abschluss der Anmeldung sicher zu überprüfen.
  2. Game Center als Anmeldedienst für Ihr Firebase-Projekt aktivieren:
    1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung.
    2. Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter für die Game Center-Anmeldung.

Game Center-Anmeldung in Ihr Spiel einbinden

Wenn Ihr Spiel noch kein Game Center verwendet, folgen Sie zuerst der Anleitung unter Incorporating Game Center into Your Game (Game Center in Ihr Spiel einbinden) und Authenticating a Local Player on the Device (Lokalen Spieler auf dem Gerät authentifizieren) auf der Apple-Entwicklerwebsite.

Die Bundle-ID, die Sie in iTunes Connect angeben, muss mit der Bundle-ID übereinstimmen, die Sie verwendet haben, als Sie Ihre App mit Ihrem Firebase-Projekt verknüpft haben.

Im Rahmen der Game Center-Integration definieren Sie einen Authentifizierungshandler, der an mehreren Stellen im Game Center-Authentifizierungsprozess aufgerufen wird. Prüfen Sie in diesem Handler, ob der Spieler mit Game Center angemeldet ist. In diesem Fall können Sie sich weiterhin in Firebase anmelden.

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

Mit Firebase authentifizieren

Nachdem Sie festgestellt haben, dass sich der lokale Spieler mit Game Center angemeldet hat, melden Sie ihn in Ihrem Spiel an, indem Sie ein AuthCredential-Objekt mit GameCenterAuthProvider.getCredential() erstellen und dieses Objekt an signIn(with:) übergeben:

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

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto 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 Nutzer in allen Apps in Ihrem Projekt zu identifizieren.

In Ihrem Spiel können Sie die Firebase-UID des Nutzers über das User-Objekt abrufen:

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

In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Wenn Sie die Spielerinformationen eines Nutzers in Game Center abrufen oder auf Game Center-Dienste zugreifen möchten, verwenden Sie die von Game Kit bereitgestellten APIs.

Rufen Sie Auth.signOut() auf, um einen Nutzer von Firebase abzumelden:

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