Mit Game Center authentifizieren

Mit Game Center können sich 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 darauf achten, dass der lokale Spieler mit Game Center angemeldet ist. Verwenden Sie dann das Objekt GameCenterAuthProvider, um Anmeldedaten für Firebase zu 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 im Bereich Other Linker Flags (Weitere Verknüpfungsmerker) 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. Dazu müssen Sie die Paket-ID Ihrer App im Registrierungsbereich eingeben. Außerdem können Sie optionale Informationen wie die App Store-ID und die Team-ID angeben. Dies ist erforderlich, um die Zielgruppe der Game Center-Anmeldedaten des Nutzers sicher zu überprüfen, 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 Bereich Authentication (Authentifizierung).
    2. Aktivieren Sie auf dem Tab Sign-in method (Anmeldemethode) den Anmeldeanbieter Game Center.

Game Center-Anmeldung in Ihr Spiel einbinden

Wenn Ihr Spiel Game Center noch nicht 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.

Achten Sie darauf, dass die Paket-ID, die Sie bei iTunes Connect angegeben haben, der Paket-ID entspricht, die Sie beim Verbinden Ihrer App mit Ihrem Firebase-Projekt verwendet 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. Wenn ja, können Sie sich bei 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
  }
};

Bei Firebase authentifizieren

Nachdem Sie festgestellt haben, dass sich der lokale Spieler mit Game Center angemeldet hat, melden Sie den Spieler in Ihrem Spiel an, indem Sie mit GameCenterAuthProvider.getCredential() ein AuthCredential-Objekt 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

Wenn sich ein Nutzer zum ersten Mal anmeldet, 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 Ihres Projekts zu identifizieren.

In Ihrem Spiel können Sie die Firebase-UID des Nutzers aus dem Objekt User 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 den Sicherheitsregeln für die Firebase Realtime Database und Cloud Storage 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 Game Center-Spielerinformationen eines Nutzers 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;
}