Bạn có thể sử dụng Game Center để cho người chơi đăng nhập vào 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 xác thực Firebase. Bạn có thể dùng thông tin xác thực này để xác thực bằng 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.
- 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).
- Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
- Chọn thư viện Firebase Authentication.
- Thêm cờ
-ObjCvào phần Other Linker Flags (Cờ trình liên kết khác) trong chế độ cài đặt bản dựng của mục tiêu. - 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 xuống ở chế độ nền.
https://github.com/firebase/firebase-ios-sdk.git
Tiếp theo, hãy thực hiện một số bước định cấu hình:
- Đảm bảo bạn đã đăng ký ứng dụng Apple với Firebase. Tức 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 không bắt buộc khác, chẳng hạn như Mã App Store và Mã nhóm, v.v. Bạn sẽ phải làm việc này để xác minh đối tượng của thông tin xác thực 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 quá trình đăng nhập.
- Bật Game Center làm nhà cung cấp dịch vụ đăng nhập cho dự án Firebase của bạn:
- Trong bảng điều khiển Firebase, hãy chuyển đến phần Security > Authentication.
- Trong thẻ Sign-in method (Phương thức đăng nhập), hãy bật 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 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 Incorporating Game Center into Your Game và Authenticating a Local Player on the Device 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 đã sử 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 quá 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 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 xác định rằng người chơi cục bộ đã đăng nhập bằng Game Center, hãy cho người chơi đăng nhập vào trò chơi của bạn bằng cách tạo đố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 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 Mã 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 người dùng trên mọi ứng dụng trong dự án.
Trong trò chơi của bạn, 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 Quy tắc bảo mật của Cơ sở dữ liệu theo thời gian thực của Firebase và Cloud Storage, bạn có thể lấy mã người dùng duy nhất của người dùng đã đăng nhập từ biến auth và sử dụng mã 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; }