Buka konsol

Melakukan Autentikasi Menggunakan Game Center

Anda dapat menggunakan Game Center untuk menyediakan fitur login bagi pemain ke game iOS yang dibangun di Firebase. Untuk menggunakan fitur login di Game Center dengan Firebase, pertama-tama pastikan pemain lokal login dengan Game Center, lalu gunakan objek GameCenterAuthProvider untuk menghasilkan kredensial Firebase, yang dapat Anda gunakan untuk mengautentikasi dengan Firebase.

Sebelum memulai

  1. Tambahkan Firebase ke project iOS Anda.

    Pastikan untuk menyertakan pod berikut dalam Podfile Anda:

    pod 'Firebase/Auth'
    
  2. Jika Anda belum menghubungkan aplikasi dengan project Firebase, lakukanlah dari Firebase console.

  3. Aktifkan Game Center sebagai penyedia login untuk project Firebase Anda:
    1. Di Firebase console, buka bagian Authentication.
    2. Pada tab Metode Login, aktifkan penyedia login Game Center.

Integrasikan login Game Center ke game Anda

Pertama-tama, jika game Anda belum menggunakan Game Center, ikuti petunjuk dalam Menyertakan Game Center ke dalam game Anda dan Mengautentikasi Pemain Lokal di Perangkat pada situs developer Apple.

Pastikan ID paket yang Anda berikan ke iTunes Connect cocok dengan ID paket yang Anda gunakan saat Anda menghubungkan aplikasi ke project Firebase Anda.

Sebagai bagian dari integrasi Game Center, Anda menetapkan pengendali autentikasi yang dipanggil di beberapa titik selama proses autentikasi Game Center. Dalam pengendali ini, periksa apakah pemain login dengan Game Center. Jika sudah, Anda dapat terus login ke Firebase.

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

Autentikasi dengan Firebase

Setelah Anda menentukan bahwa pemain lokal telah login dengan Game Center, loginkan pemain ke dalam game Anda dengan membuat objek AuthCredential dengan GameCenterAuthProvider.getCredential() dan meneruskan objek tersebut ke 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.
    }];
  }
}];

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan terhubung ke ID Game Center miliknya. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda.

Dalam game Anda, Anda dapat memperoleh UID Firebase pengguna dari objek User:

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

Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID unik milik pengguna yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses pengguna.

Untuk mendapatkan informasi pemain Game Center atau mengakses layanan Game Center, gunakan API yang disediakan oleh Game Kit.

Agar pengguna logout dari Firebase, panggil Auth.signOut():

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