Game Center'ı Kullanarak Kimlik Doğrula

Firebase'de geliştirilmiş bir Apple platform oyununda oyuncuların oturumlarını açmak için Game Center'ı kullanabilirsiniz. Alıcı: Firebase ile Game Center ile Oturum Açma özelliğini kullanın, önce yerel oynatıcının Oyun Merkezi'nde oturum açıp GameCenterAuthProvider nesnesini kullanarak Firebase ile kimlik doğrulamak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturun.

Başlamadan önce

Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

  1. Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.
  2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk.git
    .
  4. Firebase Authentication kitaplığını seçin.
  5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
  6. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.
ziyaret edin.

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

  1. Apple uygulamanızı Firebase'e kaydettiğinizden emin olun. Bu, şirketinizin uygulamanın paket kimliği ile birlikte isteğe bağlı ek App Store Kimliği ve Ekip Kimliği gibi bilgiler sağlar. Bu, öncesinde kullanıcının Game Center kimlik bilgilerinin kitlesini güvenli bir şekilde doğrulama. oturum açma işlemini tamamlayın.
  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 Oyun Merkezi'ni etkinleştirin oturum açma sağlayıcı.

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

Öncelikle, oyununuzda Oyun Merkezi henüz kullanılmıyorsa Oyun Merkezi'ni Oyununuza Dahil Etme Apple'da Cihazdaki Yerel Bir Oyuncunun Kimliğini Doğrulama geliştirici sitesi.

iTunes Connect'e sağladığınız paket kimliğinin, gönderdiğiniz paket kimliğiyle eşleştiğinden emin olun Bu özellik, uygulamanızı Firebase projenize bağladığınızda kullanılır.

Game Center entegrasyonunuz kapsamında bir kimlik doğrulama işleyici tanımlarsınız. birden fazla noktada çağrılır. İçinde oyuncunun Game Center'da oturum açıp açmadığını kontrol edin. Öyleyse Firebase'de oturum açmaya devam edin.

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

Firebase ile kimlik doğrulama

Yerel oyuncunun Game Center'da oturum açtığını belirledikten sonra şununla bir AuthCredential nesnesi oluşturarak oyuncunun oyununuzda oturum açmasını sağlayın: GameCenterAuthProvider.getCredential() ve bu nesneyi 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.
    }];
  }
}];

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve kendi Oyun Merkezi Kimliğine bağlı olabilir. Bu yeni hesap, şu bilgilerin bir parçası olarak saklanır: ve Firebase'deki tüm uygulamalarda bir kullanıcıyı tanımlamak için kullanılabilir. belirler.

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

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

Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda şunları alabilirsiniz: oturum açmış kullanıcının auth değişkenindeki benzersiz kullanıcı kimliğini kullanarak Kullanıcının hangi verilere erişebileceğini kontrol etmek

Kullanıcının Game Center oyuncu bilgilerini edinmek veya Game Center'a 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() numaralı telefonu arayın:

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