Game Center'ı Kullanarak Kimlik Doğrula

Game Center'ı kullanarak oyuncuların Firebase üzerinde oluşturulan bir Apple platformu oyununda oturum açmasını sağlayabilirsiniz. Firebase ile Game Center Sign-in'i kullanmak için önce yerel oyuncunun Game Center ile oturum açtığından emin olun. Ardından, Firebase ile kimlik doğrulamak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturmak üzere GameCenterAuthProvider nesnesini kullanın.

Başlamadan önce

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

  1. Xcode'da, uygulamanız açıkken File > Add Packages (Dosya > Paket Ekle) seçeneğine 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ının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.
  6. İşlem tamamlandığında Xcode otomatik olarak arka planda bağımlılarınızı çözümlemeye ve indirmeye başlar.

Ardından, 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 girmenin yanı sıra App Store kimliği ve takım kimliği gibi ek isteğe bağlı bilgileri de girmeniz gerektiği anlamına gelir. Bu, oturum açma işlemi tamamlanmadan önce kullanıcının Game Center kimlik bilgilerinin hedef kitlesini güvenli bir şekilde doğrulamak için gereklidir.
  2. Firebase projeniz için Game Center'ı 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 ile oturum açma özelliğini oyununuza entegre etme

Öncelikle oyununuz henüz Game Center'ı kullanmıyorsa Apple geliştirici sitesindeki Incorporating Game Center into Your Game (Game Center'ı Oyununuza Dahil Etme) ve Authenticating a Local Player on the Device (Cihazda Yerel Oyuncunun Kimliğini Doğrulama) başlıklı makalelerdeki 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 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, oynatıcının Game Center ile oturum açıp açmadığını kontrol edin. Bu durumda 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 Game Center ile oturum açtığını belirledikten sonra, AuthCredential nesnesi oluşturup GameCenterAuthProvider.getCredential() ile oyuncunun oturumunu açın ve bu nesneyi signIn(with:)'ye iletin:

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ıktan sonra yeni bir kullanıcı hesabı oluşturulur ve bu hesap, 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 kullanıcıyı tanımlamak için kullanılabilir.

Oyununuzda, kullanıcının Firebase UID'sini User nesnesinden 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, auth değişkeninden oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilir ve bunu, kullanıcının hangi verilere erişebileceğini kontrol etmek için 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() işlevini çağırı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;
}