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 Game Center noch nicht verwendet, folgen Sie zuerst der Anleitung unter Incorporating Game Center into Your Game und Authenticating a Local Player on the Device 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 den Spieler 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

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