Game Center'ı Kullanarak Kimlik Doğrulama

Oyuncuların Firebase üzerinde oluşturulmuş bir Apple platformu oyununda oturum açmasını sağlamak için Game Center'ı kullanabilirsiniz. Game Center Oturum Açma'yı Firebase ile kullanmak için öncelikle yerel oyuncunun Game Center'da oturum açtığından emin olun ve ardından Firebase ile kimlik doğrulamak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturmak için GameCenterAuthProvider nesnesini kullanın.

Sen başlamadan önce

Firebase bağımlılıklarını yüklemek ve yönetmek için Swift Paket Yöneticisini kullanın.

  1. Xcode'da uygulama projeniz açıkken Dosya > Paket Ekle'ye gidin.
  2. İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Kimlik Doğrulama kitaplığını seçin.
  5. -ObjC bayrağını hedefinizin derleme ayarlarının Diğer Bağlayıcı Bayrakları bölümüne ekleyin.
  6. Bitirdiğinizde Xcode, bağımlılıklarınızı arka planda otomatik olarak çözmeye ve indirmeye başlayacaktır.

Daha sonra bazı yapılandırma adımlarını gerçekleştirin:

  1. Apple uygulamanızı Firebase'e kaydettiğinizden emin olun. Bu, App Store Kimliği ve Takım Kimliği gibi ek isteğe bağlı bilgilerle birlikte kayıt bölümüne uygulamanızın paket kimliğini girmeniz anlamına gelir. Bu, oturum açmayı tamamlamadan önce kullanıcının Game Center kimlik bilgilerinin hedef kitleye güvenli bir şekilde doğrulanması için gerekli olacaktır.
  2. Game Center'ı Firebase projeniz için oturum açma sağlayıcısı olarak etkinleştirin:
    1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
    2. Oturum açma yöntemi sekmesinde Game Center oturum açma sağlayıcısını etkinleştirin.

Game Center Oturum Açma özelliğini oyununuza entegre edin

İlk olarak, oyununuz halihazırda Game Center'ı kullanmıyorsa, Apple geliştirici sitesindeki Game Center'ı Oyununuza Dahil Etme ve Cihazda Yerel Bir Oyuncunun Kimlik Doğrulama bölümündeki talimatları izleyin.

iTunes Connect'e sağladığınız paket kimliğinin, uygulamanızı Firebase projenize bağlarken 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 fazla noktada çağrılan bir kimlik doğrulama işleyicisi tanımlarsınız. Bu işleyicide oyuncunun Game Center'da 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ğrulama

Yerel oyuncunun Game Center'da oturum açtığını belirledikten sonra, GameCenterAuthProvider.getCredential() ile bir AuthCredential nesnesi oluşturup bu nesneyi signIn(with:) öğesine ileterek oyuncunun oyununuzdaki oturumunu açın:

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.

Oyununuzda kullanıcının Firebase UID'sini User nesnesinden alabilirsiniz:

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

Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenliği Kurallarınızda, oturum açan kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve bunu, kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Bir kullanıcının Game Center oynatıcı bilgilerini almak veya Game Center hizmetlerine erişmek için Game Kit tarafından sağlanan API'leri kullanın.

Bir kullanıcının Firebase oturumunu kapatmak için Auth.signOut() öğesini çağırın:

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