ตรวจสอบสิทธิ์โดยใช้ Game Center

คุณสามารถใช้ Game Center เพื่อลงชื่อเข้าใช้ผู้เล่นในเกมแพลตฟอร์ม Apple ที่สร้างบน Firebase หากต้องการใช้ศูนย์เกมลงชื่อเข้าใช้ด้วย Firebase ให้แน่ใจว่าครั้งแรกที่ผู้เล่นในท้องถิ่นมีการลงนามในกับศูนย์เกมและจากนั้นใช้ GameCenterAuthProvider วัตถุเพื่อสร้างการรับรอง Firebase ซึ่งคุณสามารถใช้เพื่อตรวจสอบกับ Firebase

ก่อนจะเริ่ม

ใช้ Swift Package Manager เพื่อติดตั้งและจัดการการพึ่งพา Firebase

  1. ใน Xcode กับโครงการของคุณเปิดแอปนำทางไปยังไฟล์> สวิฟท์แพคเกจ> เพิ่มแพคเกจการพึ่งพา
  2. เมื่อได้รับแจ้ง ให้เพิ่มที่เก็บ SDK ของแพลตฟอร์ม Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. เลือกไลบรารีการตรวจสอบสิทธิ์ Firebase
  5. เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ไขและดาวน์โหลดการพึ่งพาของคุณในเบื้องหลังโดยอัตโนมัติ

ถัดไป ดำเนินการตามขั้นตอนการกำหนดค่า:

  1. ตรวจสอบให้แน่ใจว่าคุณลงทะเบียนแอพ Apple กับ Firebase แล้ว นี่หมายถึงการป้อน ID ชุดแอปของคุณในส่วนการลงทะเบียนพร้อมกับข้อมูลเสริมเพิ่มเติม เช่น App Store ID และ Team ID เป็นต้น ซึ่งจำเป็นสำหรับการยืนยันผู้ชมของข้อมูลรับรอง Game Center ของผู้ใช้ก่อนที่จะลงชื่อเข้าใช้ให้เสร็จสิ้น
  2. เปิดใช้งาน Game Center เป็นผู้ให้บริการลงชื่อเข้าใช้สำหรับโปรเจ็กต์ Firebase ของคุณ:
    1. ใน คอนโซล Firebase เปิดการตรวจสอบสิทธิ์
    2. ที่ลงในแท็บวิธีการเปิดใช้งานศูนย์เกมลงชื่อเข้าใช้ผู้ให้บริการ

รวมการลงชื่อเข้าใช้ Game Center เข้ากับเกมของคุณ

ขั้นแรกหากเกมของคุณไม่ได้ใช้ศูนย์เกมทำตามคำแนะนำใน Incorporating ศูนย์เกมในเกมของคุณ และ ตรวจสอบสิทธิ์ของผู้เล่นท้องถิ่นบนอุปกรณ์ บนเว็บไซต์ของนักพัฒนาแอปเปิ้ล

ตรวจสอบว่ารหัสชุดที่คุณระบุให้กับ iTunes Connect ตรงกับรหัสชุดที่คุณใช้เมื่อเชื่อมต่อแอปกับโปรเจ็กต์ Firebase

ในการผสานรวม Game Center คุณกำหนดตัวจัดการการตรวจสอบสิทธิ์ที่เรียกหลายจุดในกระบวนการตรวจสอบสิทธิ์ Game Center ในตัวจัดการนี้ ให้ตรวจสอบว่าผู้เล่นลงชื่อเข้าใช้ด้วย Game Center หรือไม่ หากใช่ คุณจะลงชื่อเข้าใช้ 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
  }
}

วัตถุประสงค์-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

หลังจากที่คุณกำหนดว่าผู้เล่นในท้องถิ่นได้ลงนามในกับศูนย์เกมลงชื่อเข้าใช้ผู้เล่นในเกมของคุณโดยการสร้าง AuthCredential วัตถุที่มี GameCenterAuthProvider.getCredential() และผ่านวัตถุที่จะ 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!
  }

วัตถุประสงค์-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.
    }];
  }
}];

ขั้นตอนถัดไป

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับ ID Game Center ของพวกเขา บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณ

ในเกมของคุณคุณจะได้รับของผู้ใช้ Firebase UID จาก 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
}

วัตถุประสงค์-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 เรียลไทม์และการจัดเก็บเมฆกฎความปลอดภัย, คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

เพื่อให้ได้ข้อมูลศูนย์เกมผู้เล่นของผู้ใช้หรือการเข้าถึงบริการศูนย์เกม, ใช้ API ที่ได้รับจาก เกมชุด

หากต้องการลงทะเบียนผู้ใช้ออกจาก Firebase โทร Auth.signOut() :

Swift

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}

วัตถุประสงค์-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}