Catch up on everthing we announced at this year's Firebase Summit. Learn more

Game Center'ı Kullanarak Kimlik Doğrulama

Oyuncuları Firebase üzerine kurulu bir Apple platformları oyununda oturum açmak için Game Center'ı 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

Firebase bağımlılıklarını kurmak ve yönetmek için Swift Paket Yöneticisi'ni kullanın.

  1. Xcode olarak, uygulama açma projesi, gezinilebilen ile Dosya> Swift Paketleri> Paket Bağımlılık Ekle.
  2. İstendiğinde, Firebase Apple platformları SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Firebase Kimlik Doğrulama kitaplığını seçin.
  5. Bittiğinde, Xcode otomatik olarak bağımlılıklarınızı arka planda çözmeye ve indirmeye başlayacaktır.

Ardından, bazı yapılandırma adımlarını gerçekleştirin:

  1. Apple uygulamanızı Firebase'e kaydettirdiğinizden emin olun. Bu, kayıt bölümüne uygulamanızın paket kimliğinin yanı sıra App Store Kimliği ve Ekip Kimliği vb. gibi ek isteğe bağlı bilgiler girilmesi anlamına gelir. Bu, oturum açmayı tamamlamadan önce kullanıcının Game Center kimlik bilgilerinin hedef kitlesini güvenli bir şekilde doğrulamak için gerekli olacaktır.
  2. Firebase projeniz için oturum açma sağlayıcısı olarak Game Center'ı etkinleştirin:
    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.

Game Center oturum açma özelliğini oyununuza entegre edin

İ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.

iTunes Connect'e sağladığınız paket kimliğinin, uygulamanızı Firebase projenize bağladığınızda kullandığınız paket kimliğiyle eşleştiğinden emin olun.

Game Center entegrasyonunuzun bir parçası olarak, Game Center kimlik doğrulama sürecinde birden çok noktada çağrılan bir kimlik doğrulama işleyicisi tanımlarsınız. Bu işleyicide, oyuncunun Game Center ile oturum açıp açmadığını kontrol edin. Öyleyse, Firebase'de oturum açmaya 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
  }
}

Amaç-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ı yapın

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 geçirmeden 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!
  }

Amaç-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

Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve Game Center ID'sine bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve projenizdeki her uygulamada 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
}

Amaç-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)
}

Amaç-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}