Bạn có thể sử dụng dịch vụ Google Play Games để đăng nhập người chơi vào một trò chơi Android được xây dựng trên Firebase và Unity. Để sử dụng tính năng đăng nhập bằng dịch vụ Google Play Games với Firebase, trước tiên, hãy đăng nhập người chơi bằng Google Play Games và yêu cầu mã xác thực OAuth 2.0 khi bạn thực hiện việc này. Sau đó, hãy chuyển mã xác thực đến PlayGamesAuthProvider
để tạo thông tin xác thực Firebase mà bạn có thể dùng để xác thực bằng Firebase.
Trước khi bắt đầu
Thiết lập dự án Unity
Thêm tệp cấu hình Firebase và SDK Firebase Unity vào dự án Unity của bạn như mô tả trong phần Thêm Firebase vào dự án Unity. Làm theo hướng dẫn dành cho Android.
Hãy nhớ nhập
FirebaseAuth.unitypackage
.Trong Trình chỉnh sửa Unity, trong phần Build Settings (Cài đặt bản dựng) > Player Settings (Cài đặt người chơi) > Other Settings (Cài đặt khác), hãy đặt tên gói Android của trò chơi.
Sau đó, trong phần Build Settings (Cài đặt bản dựng) > Player Settings (Cài đặt trình phát) > Publishing Settings (Cài đặt phát hành), hãy chọn hoặc tạo kho khoá và khoá sẽ dùng để ký gói Android. Tệp APK của bạn phải được ký để tính năng đăng nhập vào Play Games hoạt động. Yêu cầu này không chỉ áp dụng cho việc phát hành mà còn trong quá trình phát triển trò chơi.
Thiết lập dự án Firebase
Trong bảng điều khiển Firebase, hãy chuyển đến dự án Firebase mà bạn đã đăng ký dự án Unity.
Thiết lập vân tay số SHA-1 của trò chơi trên trang Settings (Cài đặt) của bảng điều khiển Firebase bằng khoá bạn đã đặt trong Unity.
Bạn có thể lấy vân tay số SHA-1 của khoá bằng lệnh
keytool
:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
Ngoài ra, bạn có thể lấy hàm băm SHA của chứng chỉ ký bằng lệnh
signingReport
của Gradle:gradlew signingReport
APK của bạn phải được ký bằng khoá này, kể cả trong quá trình phát triển.
Bật Google Play Games làm trình cung cấp dịch vụ đăng nhập:
Trong bảng điều khiển Firebase, hãy mở phần Authentication.
Tạo và lấy mã ứng dụng khách của máy chủ web và khoá ứng dụng khách của dự án:
Trong thẻ Phương thức đăng nhập, hãy bật trình cung cấp dịch vụ đăng nhập Google.
Sao chép mã ứng dụng khách và mã xác thực của máy chủ web từ nhà cung cấp đăng nhập Google.
Trong thẻ Sign in method (Phương thức đăng nhập), hãy bật trình cung cấp dịch vụ đăng nhập Play Games và chỉ định mã ứng dụng khách và khoá ứng dụng khách của máy chủ web trong dự án mà bạn đã nhận được ở bước cuối cùng.
Định cấu hình Play Games services bằng thông tin ứng dụng Firebase
Trong Google Play Console, hãy mở ứng dụng Google Play hoặc tạo một ứng dụng.
Trong mục Phát triển, hãy nhấp vào Play Games services > Thiết lập và quản lý > Cấu hình.
Nhấp vào Có, trò chơi của tôi đã sử dụng API của Google, chọn dự án Firebase trong danh sách rồi nhấp vào Sử dụng.
Trên trang cấu hình Play Games services, hãy nhấp vào Thêm thông tin xác thực.
- Chọn loại Máy chủ trò chơi.
- Trong trường OAuth client (Ứng dụng khách OAuth), hãy chọn mã ứng dụng khách web của dự án. Hãy đảm bảo rằng đây là cùng một mã ứng dụng khách mà bạn đã chỉ định khi bật tính năng đăng nhập Play Games.
- Lưu thay đổi.
Vẫn trên trang cấu hình Play Games services, hãy nhấp lại vào Thêm thông tin xác thực.
- Chọn loại Android.
- Trong trường OAuth client (Ứng dụng OAuth), hãy chọn mã ứng dụng Android của dự án. (Nếu bạn không thấy mã ứng dụng khách Android, hãy nhớ đặt vân tay số SHA-1 của trò chơi trong bảng điều khiển Firebase.)
- Lưu thay đổi.
Trên các trang Sự kiện, Thành tích và Bảng xếp hạng, hãy tạo mọi tài nguyên Play Games mà bạn muốn sử dụng với trò chơi của mình (nếu không muốn sử dụng tài nguyên nào ngay lập tức, bạn có thể tạo mục giữ chỗ). Sau đó, trên bất kỳ trang nào trong số Sự kiện, Thành tích hoặc Bảng xếp hạng, hãy nhấp vào Nhận tài nguyên rồi sao chép đoạn mã tài nguyên Android vào một nơi thuận tiện. Bạn sẽ cần đoạn mã này để thiết lập trình bổ trợ Google Play Games services.
Đoạn mã tài nguyên sẽ có dạng như ví dụ sau:
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>
Trên trang Người thử nghiệm, hãy thêm địa chỉ email của những người dùng cần đăng nhập vào trò chơi của bạn trước khi bạn phát hành trò chơi đó trên Play Store.
Tích hợp tính năng đăng nhập bằng Play Games vào trò chơi
Tải bản phát hành mới nhất của trình bổ trợ Play Games cho Unity xuống rồi giải nén.
Nhập gói Unity của trình bổ trợ vào dự án Unity. Bạn có thể tìm thấy gói Unity trong thư mục
current-build
của bản lưu trữ bản phát hành.Thiết lập trình bổ trợ Play Games:
- Nhấp vào Window (Cửa sổ) > Google Play Games > Setup (Thiết lập) > Android Setup (Thiết lập Android) để mở màn hình Android Configuration (Cấu hình Android).
- Dán đoạn mã tài nguyên Android mà bạn nhận được từ Play Console vào trường Resources Definition (Định nghĩa tài nguyên).
- Dán mã ứng dụng khách của máy chủ web mà bạn đã cung cấp khi bật tính năng đăng nhập bằng Play Games trong bảng điều khiển Firebase vào trường Mã ứng dụng khách.
- Nhấp vào Thiết lập.
Trong trò chơi, hãy định cấu hình ứng dụng Play Games với chế độ cài đặt
RequestServerAuthCode
được bật:using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();
Sau đó, khi người chơi chọn đăng nhập bằng Play Games, hãy gọi
Social.localUser.Authenticate()
:Social.localUser.Authenticate((bool success) => { // handle success or failure });
Xác thực bằng Firebase
Sau khi thêm tính năng đăng nhập bằng Play Games vào trò chơi, bạn có thể sử dụng mã xác thực từ các dịch vụ của Play Games để xác thực bằng Firebase.
Sau khi người chơi đăng nhập thành công bằng Play Games, trong trình xử lý tiếp tục đăng nhập, hãy lấy mã xác thực cho tài khoản của người chơi:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Sau đó, hãy trao đổi mã xác thực từ Dịch vụ trò chơi của Play để lấy thông tin xác thực Firebase và sử dụng thông tin xác thực Firebase để xác thực người chơi:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
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 mã nhận dạng Play Games của họ. Tài khoản mới này được lưu trữ trong 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, bạn có thể lấy UID Firebase của người dùng từ đối tượng Firebase.Auth.FirebaseUser
:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string 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 User.TokenAsync() instead.
string uid = user.UserId;
}
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ớ trên đá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à sử dụng mã nhận dạng đó để 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 Play Games của người dùng hoặc để truy cập vào các dịch vụ của Play Games, hãy sử dụng các API do trình bổ trợ Play Games cung cấp.
Để đăng xuất người dùng, hãy gọi SignOut()
:
auth.SignOut();