Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Xác thực bằng Game Center

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bạn có thể sử dụng Trung tâm trò chơi để đăng nhập người chơi vào trò chơi trên nền tảng của Apple được xây dựng trên Firebase. Để sử dụng đăng nhập Game Center bằng Firebase, trước tiên hãy đảm bảo rằng trình phát cục bộ đã đăng nhập bằng Game Center, sau đó sử dụng đối tượng GameCenterAuthProvider để tạo thông tin xác thực 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 của Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy điều hướng đến File > Add Packages .
  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
  4. Chọn thư viện Xác thực Firebase.
  5. Khi hoàn tất, Xcode sẽ tự động bắt đầu giải quyết và tải xuống các phần phụ thuộc của bạn trong nền.

Tiếp theo, thực hiện một số bước 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à nhập ID gói ứng dụng của bạn vào phần đăng ký cùng với thông tin tùy chọn bổ sung như ID App Store và ID nhóm, v.v. Điều này sẽ được yêu cầu để xác minh an toàn đối tượng của thông tin xác thực Trung tâm trò chơi của người dùng trước khi hoàn tất đă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ở phần Xác thực .
    2. Trên tab Phương thức đăng nhập, bật nhà cung cấp dịch vụ đăng nhập Game Center .

Tích hợp đăng nhập Game Center vào trò chơi của bạn

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 Kết hợp Trung tâm trò chơi vào trò chơi của bạnXá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.

Đảm bảo ID gói bạn cung cấp cho iTunes Connect khớp với ID gói bạn đã sử dụng khi kết nối ứng dụng với dự án Firebase của mình.

Là một phần của quá trình tích hợp Game Center, bạn xác định 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 đã đăng nhập bằng Game Center chưa. Nếu vậy, bạn có thể tiếp tục đăng nhập vào Firebase.

Nhanh

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

Mục tiêu-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 với Firebase

Sau khi bạn xác định rằng người chơi cục bộ đã đă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 với GameCenterAuthProvider.getCredential() và chuyển đối tượng đó tới signIn(with:) :

Nhanh

// 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!
  }

Mục tiêu-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.
    }];
  }
}];

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à liên kết với ID 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 sử dụng để xác định người dùng trên mọi ứng dụng trong dự án của bạ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 :

Nhanh

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
}

Mục tiêu-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 thời gian thực Firebase và Quy tắc bảo mật lưu trữ đám mây, bạn có thể lấy ID người dùng duy nhất của người dùng đã đăng nhập từ biến auth và sử dụng nó để kiểm soát dữ liệu mà người dùng có thể truy cập.

Để nhận thông tin trình phát Game Center của người dùng hoặc để truy cập các dịch vụ của Game Center, hãy sử dụng API do Game Kit cung cấp.

Để đăng xuất người dùng khỏi Firebase, hãy gọi Auth.signOut() :

Nhanh

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

Mục tiêu-C

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