Xác thực bằng Trung tâm trò chơi

Bạn có thể sử dụng Game Center để cho phép người chơi đăng nhập vào một trò chơi trên nền tảng Apple được xây dựng trên Firebase. Để sử dụng tính năng Đăng nhập bằng Game Center với Firebase, trước tiên, hãy đảm bảo người chơi cục bộ đã đăng nhập bằng Game Center, sau đó sử dụng đối tượng GameCenterAuthProvider để tạo thông tin đăng nhập Firebase. Bạn có thể dùng thông tin đăng nhập này để xác thực bằng Firebase.

Trước khi bắt đầu

Sử dụng Swift Package Manager để cài đặt và quản lý các phần phụ thuộc của Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến File > Add Packages (Tệp > Thêm gói).
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK Firebase cho các nền tảng của Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Chọn thư viện Firebase Authentication.
  5. Thêm cờ -ObjC vào mục Cờ trình liên kết khác trong chế độ cài đặt bản dựng của mục tiêu.
  6. Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải các phần phụ thuộc của bạn xuống ở chế độ nền.

Tiếp theo, hãy thực hiện một số bước định cấu hình:

  1. Đảm bảo bạn đăng ký ứng dụng Apple của mình với Firebase. Điều này có nghĩa là bạn phải nhập mã nhận dạng gói của ứng dụng trong phần đăng ký cùng với thông tin bổ sung không bắt buộc, chẳng hạn như mã nhận dạng App Store và mã nhận dạng nhóm, v.v. Bạn phải làm việc này để xác minh đối tượng của thông tin đăng nhập Game Center của người dùng một cách an toàn trước khi hoàn tất quá trình đăng nhập.
  2. Bật Game Center làm nhà cung cấp dịch vụ đăng nhập cho dự án Firebase của bạn:
    1. Trong bảng điều khiển Firebase, hãy mở mục Xác thực.
    2. Trên thẻ Phương thức đăng nhập, hãy bật trình cung cấp dịch vụ đăng nhập Game Center.

Tích hợp tính năng Đăng nhập bằng Game Center vào trò chơi

Trước tiên, nếu trò chơi của bạn chưa sử dụng Game Center, hãy làm theo hướng dẫn trong phần Incorporating Game Center into Your Game (Kết hợp Game Center vào trò chơi của bạn) và Authenticating a Local Player on the Device (Xác thực người chơi cục bộ trên thiết bị) trên trang web dành cho nhà phát triển của Apple.

Hãy đảm bảo mã nhận dạng gói mà bạn cung cấp cho iTunes Connect khớp với mã nhận dạng gói mà bạn đã dùng khi kết nối ứng dụng với dự án Firebase.

Trong quá trình tích hợp Game Center, bạn sẽ xác định một trình xử lý xác thực được gọi tại nhiều điểm trong quy trình xác thực Game Center. Trong trình xử lý này, hãy kiểm tra xem người chơi có đăng nhập bằng Game Center hay không. Nếu có, bạn có thể tiếp tục đăng nhập vào 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
  }
};

Xác thực bằng Firebase

Sau khi xác định rằng người chơi tại địa phương đã đăng nhập bằng Game Center, hãy đăng nhập người chơi vào trò chơi của bạn bằng cách tạo một đối tượng AuthCredential bằng GameCenterAuthProvider.getCredential() và truyền đối tượng đó đến 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.
    }];
  }
}];

Các bước tiếp theo

Sau khi người dùng đăng nhập lần đầu, một tài khoản người dùng mới sẽ được tạo và liên kết với tên người dùng Game Center của họ. Tài khoản mới này được lưu trữ trong dự án Firebase của bạn và có thể dùng để xác định một người dùng trên mọi ứng dụng trong dự án của bạn.

Trong trò chơi, bạn có thể lấy UID Firebase của người dùng từ đối tượng 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;
}

Trong Cơ sở dữ liệu theo thời gian thực của Firebase và Quy tắc bảo mật của Bộ nhớ đám mây, bạn có thể lấy mã nhận dạng người dùng duy nhất của người dùng đã đăng nhập từ biến auth và dùng mã nhận dạng này để kiểm soát dữ liệu mà người dùng có thể truy cập.

Để lấy thông tin người chơi trên Game Center hoặc truy cập vào các dịch vụ của Game Center, hãy sử dụng các API do Game Kit cung cấp.

Để đăng xuất người dùng khỏi Firebase, hãy gọi 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;
}