Check out what’s new from Firebase at Google I/O 2022. Learn more

Game Center'ı Kullanarak Kimlik Doğrulama

Sen Firebase üzerine inşa Apple platformları oyuna oyuncuların imzalamak için Oyun Merkezi'ni kullanabilirsiniz. İlk Firebase ile oturum açma Oyun Merkezi kullandığından emin yerel oyuncu Oyun Merkezi ile oturum açtıkları olun ve sonra kullanmak için GameCenterAuthProvider Eğer Firebase ile kimlik doğrulaması için kullanabileceğiniz bir Firebase kimlik oluşturmak için nesneyi.

Sen başlamadan önce

Kullanım Swift Paket Yöneticisi yükleyip Firebase bağımlılıklarını yönetmek için.

  1. Xcode, Dosyadan için uygulama projesi açıkken, gezinilebilen ile> Paketleri ekleyin .
  2. İstendiğinde, Firebase Elma platformları depo SDK ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Firebase Kimlik kütüphanesini seçin.
  5. Tamamlandığında, Xcode otomatik çözme ve arka planda bağımlılıkları indirmeye başlar.

Sonra, bazı yapılandırma adımları uygulayın:

  1. emin Firebase ile Apple app kayıt olun. vb Bu App Store kimliği ve Takım kimliği gibi isteğe bağlı ek bilgilerle birlikte kayıt bölümünde uygulamanızın paket kimliği giren bu araçlar güvenli oturum açma tamamlamadan önce kullanıcının Oyun Merkezi kimlik kitlesini doğrulanması için gerekli olacaktır.
  2. Bir oturum açma sizin Firebase projesi için sağlayıcısı olarak Oyun Merkezini etkinleştirme:
    1. In Firebase konsoluna , Kimlik Doğrulama bölümünü açın.
    2. Yöntem sekmesinde İşaret Üzerine, Oyun Merkezi oturum açma sağlayıcıya sağlar.

oyununuza Oyun Merkezi oturum açma entegre

İlk olarak, eğer zaten yönergeleri izleyin Oyun Merkezini kullanmaz oyun Kişisel Oyun içine birleştirilerek Oyun Merkezi ve Cihaz üzerinde doğrulanırken yerel Oyuncu Apple geliştirici sitesinde.

Be emin iTunes Connect sağlamak paketi kimliği size Firebase projesine uygulamanızı bağlıyken kullandığınız paket kimliği eşleşir.

Game Center entegrasyonu parçası olarak, Oyun Merkezi kimlik doğrulama sürecinde birçok noktada denir bir kimlik doğrulama işleyicisi tanımlar. Oyuncunun Oyun Merkezi ile oturum açmışsa bu işleyici olarak, kontrol edin. Eğer öyleyse, Firebase oturum devam edebilirsiniz.

Süratli

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

Firebase ile kimlik doğrulaması

Yerel oyuncu Oyun Merkezi ile imzalanan olduğunu belirledikten sonra, bir oluşturarak oyuna oynatıcıyı oturum AuthCredential nesneyi GameCenterAuthProvider.getCredential() ve bu nesneyi signIn(with:) :

Süratli

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

Sonraki adımlar

ilk defa bir oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve onların Oyun Center kimliği ile bağlantılı. Bu yeni hesap Firebase projesinin bir parçası olarak depolanır ve projenizde her uygulamanıza bir kullanıcıyı tanımlamak için kullanılabilir.

Oyununuz, içinden kullanıcının Firebase UID alabilirsiniz User nesnesi:

Süratli

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

Senin Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenliği Kuralları, sen alabilirsiniz, kullanıcının benzersiz bir kullanıcı kimliği imzalı auth değişkeni ve hangi verilerin kullanıcı teneke erişimi kontrol etmek için kullanabilirsiniz.

Bir kullanıcının Oyun Merkezi oyuncu bilgileri veya erişim Oyun Merkezi hizmetlerine ulaşmak için sağladığı API'leri kullanmak Oyun Seti .

Firebase dışında bir kullanıcı oturum için çağrı Auth.signOut() :

Süratli

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