Аутентификация в Unity с помощью игровых сервисов Google Play
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Вы можете использовать сервисы Google Play Games для входа игроков в игру для Android, созданную на базе Firebase и Unity. Чтобы использовать вход в сервисы Google Play Games с помощью Firebase, сначала войдите в плеер с помощью Google Play Games и при этом запросите код аутентификации OAuth 2.0. Затем передайте код аутентификации PlayGamesAuthProvider , чтобы сгенерировать учетные данные Firebase, которые вы можете использовать для аутентификации в Firebase.
Прежде чем начать
Настройте свой проект Unity
Добавьте файл конфигурации Firebase и FirebaseUnity SDK в свой проект Unity, как описано в разделе Добавление Firebase в ваш проект Unity . Следуйте инструкциям для Android.
Обязательно импортируйте FirebaseAuth.unitypackage .
В редакторе Unity в разделе «Настройки сборки» > «Настройки проигрывателя» > «Другие настройки» укажите имя пакета Android вашей игры.
Затем в разделе «Настройки сборки» > «Настройки проигрывателя» > «Настройки публикации» выберите или создайте хранилище ключей и ключ, которые будут использоваться для подписи вашего пакета Android. Ваш APK должен быть подписан, чтобы вход в Play Игры работал. Это требование применимо не только к публикации, но и во время разработки игры.
Настройте свой проект Firebase
В консоли Firebase перейдите к проекту Firebase, в котором вы зарегистрировали свой проект Unity.
Установите отпечаток SHA-1 вашей игры на странице настроек консоли Firebase , используя ключ, который вы установили в Unity.
Вы можете получить отпечаток SHA-1 вашего ключа с помощью команды keytool :
Создайте и получите идентификатор клиента веб-сервера и секрет клиента:
На вкладке «Метод входа» включите поставщика входа в систему Google .
Скопируйте идентификатор и секрет клиента веб-сервера от поставщика услуг входа в Google .
На вкладке «Метод входа» включите поставщика входа в Play Games и укажите идентификатор клиента веб-сервера вашего проекта и секрет клиента, которые вы получили на последнем шаге.
Настройте Play Games services используя информацию о вашем приложении Firebase.
В разделе «Развитие» нажмите Play Games services > «Настройка и управление» > «Конфигурация» .
Нажмите «Да, моя игра уже использует Google API» , выберите свой проект Firebase из списка и нажмите « Использовать» .
На странице конфигурации Play Games services нажмите «Добавить учетные данные» .
Выберите тип игрового сервера .
В поле «Клиент OAuth» выберите идентификатор веб-клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа в Play Games .
Сохраните изменения.
На странице конфигурации Play Games services еще раз нажмите «Добавить учетные данные» .
Выберите тип Android .
В поле «Клиент OAuth» выберите идентификатор клиента Android вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы установили отпечаток SHA-1 своей игры в консоли Firebase .)
Сохраните изменения.
На страницах «События» , «Достижения» и «Списки лидеров» создайте любые ресурсы Play Games которые вы хотите использовать в своей игре (если вы не хотите использовать их сразу, вы можете создать запись-заполнитель). Затем на любой странице «События» , «Достижения» или «Списки лидеров» нажмите «Получить ресурсы» и скопируйте фрагмент ресурсов Android в удобное место. Этот фрагмент понадобится вам для настройки плагина Google Play Games services .
На странице «Тестеры» добавьте адреса электронной почты всех пользователей, которым необходимо будет иметь возможность войти в вашу игру, прежде чем вы выпустите ее в Play Store .
Импортируйте пакет Unity плагина в свой проект Unity. Вы можете найти пакет Unity в каталоге current-build архива выпуска.
Настройте плагин Play Games:
Нажмите «Окно» > «Google Play Игры» > «Настройка» > «Настройка Android» , чтобы открыть экран «Конфигурация Android» .
Вставьте фрагмент ресурсов Android, полученный из консоли Play, в поле «Определение ресурсов» .
Вставьте идентификатор клиента веб-сервера, который вы указали при включении входа в Play Игры в консоли Firebase , в поле «Идентификатор клиента» .
Нажмите «Настроить» .
В своей игре настройте клиент Play Games с включенным параметром RequestServerAuthCode :
usingGooglePlayGames;usingGooglePlayGames.BasicApi;usingUnityEngine.SocialPlatforms;usingSystem.Threading.Tasks;PlayGamesClientConfigurationconfig=newPlayGamesClientConfiguration.Builder().RequestServerAuthCode(false/* Don't force refresh */).Build();PlayGamesPlatform.InitializeInstance(config);PlayGamesPlatform.Activate();
Затем, когда игрок решит войти в систему с помощью Play Games, вызовите Social.localUser.Authenticate() :
Social.localUser.Authenticate((boolsuccess)=>{// handle success or failure});
Аутентификация с помощью Firebase
После того как вы добавите вход в Play Games в свою игру, вы сможете использовать код авторизации из сервисов Play Games для аутентификации в Firebase.
После того как игрок успешно вошел в систему с помощью Play Games, в обработчике продолжения входа получите код авторизации для учетной записи игрока:
Затем замените код авторизации из сервисов Play Games на учетные данные Firebase и используйте учетные данные Firebase для аутентификации игрока:
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);});
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, которая связывается с его идентификатором Play Games. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении вашего проекта.
В вашей игре вы можете получить UID пользователя Firebase из объекта 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;}
В правилах безопасности базы данных реального времени и облачного хранилища Firebase вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.
Чтобы получить информацию об игроке Play Games пользователя или получить доступ к сервисам Play Games, используйте API, предоставляемые плагином Play Games.
[null,null,["Последнее обновление: 2025-08-15 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();"]]