Mit Game Center authentifizieren

Sie können das Game Center verwenden, um Spieler in einem auf Firebase basierenden Spiel für Apple-Plattformen anzumelden. Wenn Sie die Game Center-Anmeldung mit Firebase verwenden möchten, prüfen Sie zuerst, ob der lokale Spieler im Game Center angemeldet ist. Verwenden Sie dann das GameCenterAuthProvider-Objekt, um Firebase-Anmeldedaten 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 Bibliothek Firebase Authentication aus.
  5. Fügen Sie das Flag -ObjC im Abschnitt Other Linker Flags (Weitere Verknüpfungsmerker) der Build-Einstellungen des 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 im Registrierungsbereich die Bundle-ID Ihrer App sowie zusätzliche optionale Informationen wie die App Store-ID und die Team-ID eingeben. Dies ist erforderlich, um die Zielgruppe der Game Center-Anmeldedaten des Nutzers vor Abschluss der Anmeldung sicher zu überprüfen.
  2. So aktivieren Sie Game Center als Anmeldeanbieter für Ihr Firebase-Projekt:
    1. Öffnen Sie in der Firebase Console den Bereich Authentifizierung.
    2. Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Game Center.

Game Center-Anmeldung in Ihr Spiel einbinden

Wenn in Ihrem Spiel noch kein Game Center verwendet wird, folgen Sie zuerst der Anleitung unter Game Center in Ihr Spiel einbinden und Lokalen Spieler auf dem Gerät authentifizieren auf der Apple-Entwicklerwebsite.

Die Bundle-ID, die Sie bei 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 Ihrer Game Center-Integration definieren Sie einen Authentifizierungs-Handler, der an mehreren Stellen im Game Center-Authentifizierungsprozess aufgerufen wird. Prüfe in diesem Handler, ob der Spieler im 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 du festgestellt hast, dass sich der lokale Spieler mit Game Center angemeldet hat, kannst du ihn in deinem Spiel anmelden. Erstelle dazu ein AuthCredential-Objekt mit GameCenterAuthProvider.getCredential() und übergebe es an signIn(with:):

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 APIs von Game Kit.

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