Xác thực trong Unity bằng Dịch vụ trò chơi của Google Play
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 dịch vụ trò chơi của Google Play để đăng nhập người chơi vào trò chơi Android
tạo dựa trên Firebase và Unity. Cách đăng nhập bằng Dịch vụ trò chơi của Google Play
Firebase, trước tiên, hãy đăng nhập người chơi bằng Google Play Games rồi yêu cầu một
Mã xác thực OAuth 2.0 khi bạn làm vậy. Sau đó, chuyển mã uỷ quyền cho
PlayGamesAuthProvider để tạo thông tin đăng nhập Firebase mà bạn có thể sử 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 UnityFirebase vào dự án Unity
như được mô tả trong
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, ở mục Build Settings > (Cài đặt bản dựng >) Cài đặt trình phát > Lý do khác
Cài đặt đặt tên gói Android cho trò chơi của bạn.
Sau đó, trong Build Settings > (Cài đặt bản dựng >) Cài đặt trình phát > Cài đặt xuất bản,
chọn hoặc tạo một kho khoá và khoá dùng để ký thiết bị Android của bạn
. Bạn phải ký APK của mình để tính năng đăng nhập vào Play Games hoạt động được. Đây là cách
yêu cầu này không chỉ áp dụng cho việc xuất bản mà còn trong quá trình phát triển
trò chơi của bạn.
Tạo và lấy mã ứng dụng khách và ứng dụng khách của máy chủ web cho dự án của bạn
bí mật:
Trong thẻ Phương thức đăng nhập, hãy bật tính năng đăng nhập của Google
Google Cloud.
Sao chép mã ứng dụng khách của máy chủ web và mã bí mật trong phiên đăng nhập bằng Google
Google Cloud.
Trong thẻ Phương thức đăng nhập, hãy bật Play Games
nhà cung cấp dịch vụ đăng nhập và chỉ định mã ứng dụng khách của máy chủ web của dự án và
mật khẩu ứng dụng khách 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 của bạn
Trong phần 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, hãy chọn Firebase
dự án từ danh sách, rồi nhấp vào Use (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 ứng dụng OAuth, hãy chọn mã ứng dụng web của dự án. Hãy
đảm bảo đây chính là ID ứng dụng khách bạn đã chỉ định khi bật
Đăng nhập Play Games.
Lưu thay đổi.
Vẫn trên trang cấu hình Play Games services, nhấp vào
Thêm lại thông tin xác thực.
Chọn loại Android.
Trong trường ứng dụng OAuth, hãy chọn mã ứng dụng khách Android của dự án.
(Nếu bạn không thấy ID ứng dụng khách Android của mình, hãy đảm bảo bạn đã đặt
Vân tay số SHA-1 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 bất kỳ
Play Games tài nguyên bạn muốn sử dụng trong trò chơi (nếu bạn chưa
muốn sử dụng bất kỳ mục nào ngay lập tức, bạn có thể tạo một mục nhập phần giữ chỗ). Sau đó, bật
bất kỳ trang Sự kiện, Thành tích hoặc Bảng xếp hạng nào, hãy nhấp vào
Lấy tài nguyên rồi sao chép đoạn mã tài nguyên Android ở một nơi nào đó
thuận tiện. Bạn cần có đoạn mã để thiết lập Google Play Games services
.
Trên trang Nhân viên kiểm thử, hãy thêm địa chỉ email của tất cả những người dùng cần
đăng nhập vào trò chơi của bạn trước khi phát hành trên
Play Store.
Tích hợp tính năng đăng nhập trên Play Games vào trò chơi của bạ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 kho 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 > 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 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
Đăng nhập Play Games trong bảng điều khiển Firebase vào Mã ứng dụng khách
.
Nhấp vào Setup (Thiết lập).
Trong trò chơi của bạn, hãy định cấu hình ứng dụng Play Games bằng RequestServerAuthCode
bật chế độ cài đặt:
usingGooglePlayGames;usingGooglePlayGames.BasicApi;usingUnityEngine.SocialPlatforms;usingSystem.Threading.Tasks;PlayGamesClientConfigurationconfig=newPlayGamesClientConfiguration.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((boolsuccess)=>{// handle success or failure});
Xác thực bằng Firebase
Sau khi thêm thông tin đăng nhập vào Play Games vào trò chơi của mình, bạn có thể sử dụng mã xác thực từ
Dịch vụ trò chơi của Play để 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 bước đăng nhập
trình xử lý tiếp tục, lấy mã xác thực cho tài khoản người chơi:
Sau đó, hãy trao đổi mã xác thực từ dịch vụ trò chơi của Play cho Firebase
thông tin xác thực và sử dụng thông tin xác thực Firebase để xác thực người chơi:
Firebase.Auth.FirebaseAuthauth=Firebase.Auth.FirebaseAuth.DefaultInstance;Firebase.Auth.Credentialcredential=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.AuthResultresult=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 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 Play Games 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 Firebase.Auth.FirebaseUser:
Firebase.Auth.FirebaseUseruser=auth.CurrentUser;if(user!=null && user.IsValid()){stringplayerName=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.stringuid=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 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 của Play Games hoặc để truy cập vào dịch vụ trò chơi của Play,
hãy dùng API do trình bổ trợ Play Games cung cấp.
[null,null,["Cập nhật lần gần đây nhất: 2025-08-29 UTC."],[],[],null,["You can use Google Play Games services to sign in players to an Android game\nbuilt on Firebase and Unity. To use Google Play Games services sign-in with\nFirebase, first sign in the player with Google Play Games, and request an\nOAuth 2.0 auth code when you do so. Then, pass the auth code to\n`PlayGamesAuthProvider` to generate a Firebase credential, which you can use to\nauthenticate with Firebase.\n| **Important:** You can use Google Play Games services sign-in only on Android.\n\nBefore you begin\n\nSet up your Unity project\n\n1. Add the Firebase config file and the Firebase Unity SDK to your Unity project\n as described in\n [Add Firebase to your Unity project](/docs/unity/setup#set_up_environment).\n Follow the instructions for Android.\n\n Be sure to import `FirebaseAuth.unitypackage`.\n2. In the Unity Editor, under **Build Settings \\\u003e Player Settings \\\u003e Other\n Settings** set the Android package name of your game.\n\n3. Then, under **Build Settings \\\u003e Player Settings \\\u003e Publishing Settings**,\n select or create a keystore and key, which will be used to sign your Android\n package. Your APK must be signed for Play Games sign-in to work---this\n requirement applies not just for publishing, but also during development of\n your game.\n\nSet up your Firebase project\n\n1. In the [Firebase console](//console.firebase.google.com/), go to the Firebase project\n in which you registered your Unity project.\n\n2. Set your game's SHA-1 fingerprint from the\n [Settings](//console.firebase.google.com/project/_/settings/general/) page\n of the Firebase console, using the key you set in Unity.\n\n You can get the SHA-1 fingerprint of your key with the `keytool` command: \n\n ```\n keytool -exportcert -list -v \\\n -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE\n ```\n\n \u003cbr /\u003e\n\n Alternatively, you can get the SHA hash of your signing certificate with the\n gradle `signingReport` command: \n\n ```\n gradlew signingReport\n ```\n\n \u003cbr /\u003e\n\n Your APK must be signed with this key, including during development.\n3. Enable Google Play Games as a sign-in provider:\n\n 1. In the Firebase console, open the\n [**Authentication** section](//console.firebase.google.com/project/_/authentication/providers).\n\n 2. Generate and obtain your project's web server client ID and client\n secret:\n\n 1. Within the **Sign in method** tab, enable the **Google** sign-in\n provider.\n\n 2. Copy the web server client ID and secret from the **Google** sign-in\n provider.\n\n 3. Within the **Sign in method** tab, enable the **Play Games**\n sign-in provider, and specify your project's web server client ID and\n client secret, which you got in the last step.\n\nConfigure Play Games services with your Firebase app information\n\n1. In the\n [Google Play Console](https://play.google.com/console/developers),\n open your Google Play app or create one.\n\n2. In the *Grow* section, click\n **Play Games services \\\u003e Setup \\& Management \\\u003e Configuration**.\n\n3. Click **Yes, my game already uses Google APIs** , select your Firebase\n project from the list, and then click **Use**.\n\n4. On the Play Games services configuration page, click\n **Add Credential**.\n\n 1. Select the **Game server** type.\n 2. In the **OAuth client** field, select your project's web client ID. Be sure this is the same client ID you specified when you enabled Play Games sign-in.\n 3. Save your changes.\n5. Still on the Play Games services configuration page, click\n **Add Credential** again.\n\n 1. Select the **Android** type.\n 2. In the **OAuth client** field, select your project's Android client ID. (If you don't see your Android client ID, be sure you set your game's SHA-1 fingerprint in the Firebase console.)\n 3. Save your changes.\n6. On the **Events** , **Achievements** , and **Leaderboards** pages, create any\n Play Games resources you want to use with your game (if you don't\n want to use any immediately, you can create a placeholder entry). Then, on\n any of the **Events** , **Achievements** , or **Leaderboards** pages, click\n **Get resources** and copy the Android resources snippet somewhere\n convenient. You will need the snippet to set up the Google Play Games services\n plugin.\n\n The resources snippet looks like the following example: \n\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003c!--\n Google Play game services IDs.\n Save this file as res/values/games-ids.xml in your project.\n --\u003e\n \u003cresources\u003e\n \u003c!-- app_id --\u003e\n \u003cstring name=\"app_id\" translatable=\"false\"\u003e123456789000\u003c/string\u003e\n \u003c!-- package_name --\u003e\n \u003cstring name=\"package_name\" translatable=\"false\"\u003ecom.example.game\u003c/string\u003e\n \u003c!-- event Wiped Raid --\u003e\n \u003cstring name=\"event_wiped_raid\" translatable=\"false\"\u003eCgkIpKjv1a4PEAIYBA\u003c/string\u003e\n \u003c/resources\u003e\n\n7. On the **Testers** page, add the email addresses of any users who need\n to be able to sign in to your game before you release it on the\n Play Store.\n\nIntegrate Play Games sign-in into your game\n\n1. Download the latest release of the\n [Play Games plugin for Unity](https://github.com/playgameservices/play-games-plugin-for-unity/releases)\n and extract it.\n\n2. Import the plugin's Unity package into your Unity project. You can find the\n Unity package in the `current-build` directory of the release archive.\n\n3. Set up the Play Games plugin:\n\n 1. Click **Window \\\u003e Google Play Games \\\u003e Setup \\\u003e Android Setup** to open the **Android Configuration** screen.\n 2. Paste the Android resources snippet you got from the Play console into the **Resources Definition** field.\n 3. Paste your web server client ID, which you provided when you enabled Play Games sign-in in the Firebase console, into the **Client ID** field.\n 4. Click **Setup**.\n4. In your game, configure a Play Games client with the `RequestServerAuthCode`\n setting enabled:\n\n using GooglePlayGames;\n using GooglePlayGames.BasicApi;\n using UnityEngine.SocialPlatforms;\n using System.Threading.Tasks;\n\n PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()\n .RequestServerAuthCode(false /* Don't force refresh */)\n .Build();\n\n PlayGamesPlatform.InitializeInstance(config);\n PlayGamesPlatform.Activate();\n\n5. Then, when a player chooses to sign in with Play Games, call\n `Social.localUser.Authenticate()`:\n\n Social.localUser.Authenticate((bool success) =\u003e {\n // handle success or failure\n });\n\nAuthenticate with Firebase\n\nAfter you add Play Games sign-in to your game, you can use the auth code from\nPlay Games services to authenticate with Firebase.\n\n1. After the player has successfully signed in using Play Games, in the sign-in\n continuation handler, get an auth code for the player's account:\n\n Social.localUser.Authenticate((bool success) =\u003e {\n if (success) {\n authCode = PlayGamesPlatform.Instance.GetServerAuthCode();\n }\n });\n\n2. Then, exchange the auth code from Play Games services for a Firebase\n credential, and use the Firebase credential to authenticate the player:\n\n Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;\n Firebase.Auth.Credential credential =\n Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);\n auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task =\u003e {\n if (task.IsCanceled) {\n Debug.LogError(\"SignInAndRetrieveDataWithCredentialAsync was canceled.\");\n return;\n }\n if (task.IsFaulted) {\n Debug.LogError(\"SignInAndRetrieveDataWithCredentialAsync encountered an error: \" + task.Exception);\n return;\n }\n\n Firebase.Auth.AuthResult result = task.Result;\n Debug.LogFormat(\"User signed in successfully: {0} ({1})\",\n result.User.DisplayName, result.User.UserId);\n });\n\nNext steps\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to their Play Games ID. This new account is stored as part of your\nFirebase project, and can be used to identify a user across every app in your\nproject.\n\nIn your game, you can get the user's Firebase UID from the\n`Firebase.Auth.FirebaseUser` object: \n\n Firebase.Auth.FirebaseUser user = auth.CurrentUser;\n if (user != null && user.IsValid()) {\n string playerName = user.DisplayName;\n\n // The user's Id, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server, if you\n // have one; use User.TokenAsync() instead.\n string uid = user.UserId;\n }\n\nIn your Firebase Realtime Database and Cloud Storage Security Rules, you can get\nthe signed-in user's unique user ID from the `auth` variable, and use it to\ncontrol what data a user can access.\n\nTo get a user's Play Games player information or to access Play Games services,\nuse the APIs provided by the Play Games plugin.\n\nTo sign out a user, call `SignOut()`: \n\n auth.SignOut();"]]