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. Game Center ile Oturum Açma özelliğini Firebase ile kullanmak için önce yerel oynatıcının Game Center'da oturum açtığından emin olun. Ardından GameCenterAuthProvider nesnesini kullanarak Firebase kimlik bilgisi oluşturun. Bu kimliği Firebase ile kimlik doğrulamak için kullanabilirsiniz.

Başlamadan önce

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

  1. Xcode'da, uygulamanız açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
  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. İşlem tamamlandığında Xcode, arka planda bağımlılıklarınızı otomatik olarak çözümlemeye ve indirmeye başlar.

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

  1. Apple uygulamanızı Firebase'e kaydettiğinizden emin olun. Bu, kayıt bölümüne uygulamanızın paket kimliğini ve App Store Kimliği ve Ekip Kimliği gibi isteğe bağlı ek bilgileri girmenizi gerektirir. Oturum açma işlemini tamamlamadan önce kullanıcının Game Center kimlik bilgilerinin kitlesini güvenli bir şekilde doğrulamak için bu gereklidir.
  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 Game Center'ı halihazırda kullanmıyorsa Apple geliştirici sitesindeki InConnecting the Local Player on the Game (Oyun Merkezi'ni Oyununuza Dahil Etme) ve Authenticating a Local Player on the Device (Cihazda Yerel Oyuncunun Kimlik Doğrulaması) bölümündeki talimatları uygulayın.

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 entegrasyonunuz kapsamında, Game Center kimlik doğrulama işleminin birden fazla noktasında çağrılan bir kimlik doğrulama işleyici tanımlarsınız. Bu işleyicide oyuncunun Game Center'da oturum açmış olup olmadığını kontrol edin. Öyleyse Firebase'de oturum açmaya devam edebilirsiniz.

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 Oyun Merkezi'nde oturum açtığını doğruladıktan sonra, GameCenterAuthProvider.getCredential() ile bir AuthCredential nesnesi oluşturup bu nesneyi signIn(with:) adresine ileterek oyuncunun oyununuzda oturum açmasını sağlayın:

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 kullanıcının Game Center kimliğine 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, 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, oturum açan kullanıcının auth değişkeninden benzersiz kullanıcı kimliğini alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bunu kullanabilirsiniz.

Kullanıcının Game Center oyuncu 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() 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;
}