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

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

Trước khi bắt đầu

Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến Tệp > Thêm gói.
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Chọn thư viện Xác thực Firebase.
  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 xuống các phần phụ thuộc trong nền.

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

  1. Hãy nhớ đăng ký ứng dụng Apple của bạn với Firebase. Điều này có nghĩa là nhập mã gói ứng dụng trong phần đăng ký cùng với những thông tin không bắt buộc khác chẳng hạn như Mã App Store và Mã nhóm, v.v. Đây là thông tin bắt buộc đối với xác minh đối tượng bằng thông tin đăng nhập Trung tâm trò chơi của người dùng một cách an toàn trước khi hoàn tất đăng nhập.
  2. Bật Trung tâm trò chơi 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 của Firebase, hãy mở phần Xác thực.
    2. Trên thẻ Phương thức đăng nhập, hãy bật Trung tâm trò chơi nhà cung cấp dịch vụ đăng nhập.

Tích hợp tính năng Đăng nhập vào Trung tâm trò chơi vào trò chơi

Trước tiên, nếu trò chơi của bạn chưa sử dụng Trung tâm trò chơi, hãy làm theo hướng dẫn trong Tích hợp Trung tâm trò chơi vào trò chơiXác thực một trình phát cục bộ trên thiết bị trên Apple trang web dành cho nhà phát triển.

Hãy đảm bảo rằng 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 bạn cung cấp được sử dụng khi bạn kết nối ứng dụng của mình với dự án Firebase.

Trong quá trình tích hợp Trung tâm trò chơi, 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 quá trình xác thực Trung tâm trò chơi. Ngang bằng trình xử lý này, hãy kiểm tra xem người chơi đã đăng nhập bằng Trung tâm trò chơi hay chưa. 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 bạn xác định rằng người chơi trên máy đã đăng nhập bằng Trung tâm trò chơi, đă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 với GameCenterAuthProvider.getCredential() rồi 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 tiên, một tài khoản người dùng mới sẽ được tạo và có liên kết với mã nhận dạng Trung tâm trò chơi của họ. Tài khoản mới này được lưu trữ như một phần của dự án Firebase và có thể được dùng để xác định người dùng trên mọi ứng dụng trong dự án.

Trong trò chơi của mình, 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 Cloud Storage, bạn có thể nhận được 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 rồi sử dụng mã đó để kiểm soát loại dữ liệu mà người dùng có thể truy cập.

Để lấy thông tin người chơi trên Trung tâm trò chơi của người dùng hoặc để truy cập Trung tâm trò chơi dịch vụ của chúng tôi, hãy sử dụng API do Bộ công cụ trò chơi 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;
}