Authentifizieren mit Game Center

Sie können Game Center verwenden, um Spieler bei einem auf Firebase basierenden Apple-Plattform-Spiel anzumelden. So verwenden Sie Sign-in Game Center mit Firebase, zuerst sicherstellen , dass der lokale Spieler mit Game Center unterzeichnet, und verwenden Sie dann das GameCenterAuthProvider Objekt eine Firebase Berechtigungsnachweis zu generieren, die Sie verwenden können mit Firebase zu authentifizieren.

Bevor Sie beginnen

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

  1. In Xcode, mit Ihrem App - Projekt zu öffnen, navigieren Sie zu Datei> Swift Packages> Paket hinzufügen Abhängigkeit.
  2. Wenn Sie dazu aufgefordert werden, fügen Sie das SDK-Repository der Firebase Apple Platforms hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Wählen Sie die Firebase Authentication-Bibliothek aus.
  5. Wenn Sie fertig sind, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.

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

  1. Stellen Sie sicher, dass Sie Ihre Apple-App bei Firebase registrieren. Dies bedeutet, dass Sie die Bundle-ID Ihrer App im Registrierungsbereich 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 überprüfen, bevor die Anmeldung abgeschlossen wird.
  2. Aktivieren Sie Game Center als Anmeldeanbieter für Ihr Firebase-Projekt:
    1. In der Firebase Konsole öffnen den Abschnitt Authentication.
    2. Auf dem Anmelden Methode Registerkarte, aktivieren Sie das Game Center-Anmelde Anbieter.

Integrieren Sie die Game Center-Anmeldung in Ihr Spiel

Erstens, wenn Sie Ihr Spiel nicht bereits Game Center verwenden, folgen Sie den Anweisungen in Incorporating Game Center in dein Spiel und Authentifizieren eines Local Player auf dem Gerät auf der Apple - Entwickler - Website.

Stellen Sie sicher, dass die Bundle-ID, die Sie iTunes Connect zur Verfügung stellen, mit der Bundle-ID übereinstimmt, die Sie beim Verbinden Ihrer App mit Ihrem Firebase-Projekt verwendet 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
  }
};

Mit Firebase authentifizieren

Nachdem Sie , dass der lokale Spieler bestimmt mit Game Center, melden Sie den Spieler in Ihrem Spiel durch die Schaffung eines unterzeichnet hat AuthCredential Objekts mit GameCenterAuthProvider.getCredential() und vorbei , das Objekt zu 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 anmeldet, 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 Benutzerfirebase UID aus dem bekommen User

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 Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln, können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Um ein Benutzer Game Center - Spieler Informationen oder den Zugriff auf Game Center Dienstleistungen zu erhalten, verwenden Sie die von einer dritten APIs Game Kit .

Um sich anzumelden einen Benutzer aus Firebase, 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;
}