Вы можете использовать сервисы Google Play Games для входа игроков в игру для Android, созданную на базе Firebase. Чтобы использовать вход в сервисы Google Play Games с помощью Firebase, сначала войдите в систему игрока с помощью Google Play Games и при этом запросите код аутентификации OAuth 2.0. Затем передайте код аутентификации PlayGamesAuthProvider
, чтобы сгенерировать учетные данные Firebase, которые вы можете использовать для аутентификации в Firebase.
Прежде чем начать
Настройте свой Android-проект
Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
В файле Gradle вашего модуля (на уровне приложения) (обычно
<project>/<app-module>/build.gradle.kts
или<project>/<app-module>/build.gradle
) добавьте зависимость для Firebase Authentication библиотека для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.Кроме того, в рамках настройки Firebase Authentication вам необходимо добавить в свое приложение SDK сервисов Google Play.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.3.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.
Ищете библиотечный модуль, специфичный для Kotlin? Начиная с октября 2023 года ( Firebase BoM 32.5.0) от основного модуля библиотеки могут зависеть как разработчики Kotlin, так и Java (подробнее см. FAQ по этой инициативе ).(Альтернатива) Добавить зависимости библиотеки Firebase без использования BoM
Если вы решите не использовать Firebase BoM , вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.
Обратите внимание: если вы используете в своем приложении несколько библиотек Firebase, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
Настройте свой проект Firebase
Установите отпечаток SHA-1 вашей игры на странице настроек консоли Firebase .
Вы можете получить хэш SHA вашего сертификата подписи с помощью команды gradle
signingReport
:./gradlew signingReport
Включите Google Play Games в качестве поставщика услуг входа:
Найдите идентификатор клиента веб-сервера и секрет клиента вашего проекта. Идентификатор клиента веб-сервера идентифицирует ваш проект Firebase на серверах аутентификации Google Play.
Чтобы найти эти значения:
- Откройте проект Firebase на странице учетных данных консоли API Google .
- В разделе «Идентификаторы клиентов OAuth 2.0» откройте страницу сведений о веб-клиенте (автоматически созданном службой Google) . На этой странице указан идентификатор клиента и секрет вашего веб-сервера.
Затем в консоли Firebase откройте раздел Аутентификация .
На вкладке «Метод входа» включите поставщика входа в Play Games . Вам нужно будет указать идентификатор клиента веб-сервера вашего проекта и секретный код клиента, которые вы получили из консоли API.
Настройте Play Games services используя информацию о вашем приложении Firebase.
В консоли Google Play откройте приложение Google Play или создайте его.
В разделе «Развитие» нажмите Play Games services > «Настройка и управление» > «Конфигурация» .
Нажмите «Да, моя игра уже использует API Google» , выберите свой проект Firebase из списка и нажмите « Использовать» .
На странице конфигурации Play Games services нажмите «Добавить учетные данные» .
- Выберите тип игрового сервера .
- В поле «Клиент OAuth» выберите идентификатор веб-клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа в Play Games .
- Сохраните изменения.
На странице конфигурации Play Games services еще раз нажмите «Добавить учетные данные» .
- Выберите тип Android .
- В поле «Клиент OAuth» выберите идентификатор клиента Android вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы установили отпечаток SHA-1 своей игры в консоли Firebase .)
- Сохраните изменения.
На странице «Тестеры» добавьте адреса электронной почты всех пользователей, которым необходимо будет иметь возможность войти в вашу игру, прежде чем вы выпустите ее в Play Store .
Интегрируйте вход в Play Игры в свою игру
Сначала интегрируйте вход в Play Игры в свое приложение. Подробные инструкции см. в разделе «Вход в игры Android» .
В вашей интеграции при создании объекта GoogleSignInOptions
используйте конфигурацию DEFAULT_GAMES_SIGN_IN
и вызовите requestServerAuthCode
:
Kotlin+KTX
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build()
Java
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build();
Вы должны передать идентификатор клиента вашего веб-сервера в метод requestServerAuthCode
. Это идентификатор, который вы указали при включении входа в Play Игры в консоли Firebase .
Аутентификация с помощью Firebase
После того как вы добавите вход в Play Игры в свое приложение, вам необходимо настроить Firebase для использования учетных данных учетной записи Google, которые вы получаете, когда игрок успешно входит в систему с Play Games.
- Сначала в методе
onCreate
вашего действия входа в систему получите общий экземпляр объектаFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации вашей активности проверьте, вошел ли игрок уже в Firebase:
Kotlin+KTX
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
- После того, как игрок войдет в систему с помощью Play Games автоматически или в интерактивном режиме, получите код аутентификации из объекта
GoogleSignInAccount
, замените его на учетные данные Firebase и выполните аутентификацию в Firebase, используя учетные данные Firebase:
Kotlin+KTX
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!) val auth = Firebase.auth val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } // ... } }
Java
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId()); final FirebaseAuth auth = FirebaseAuth.getInstance(); AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode()); auth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = auth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
Если вызов signInWithCredential
завершится успешно, вы можете использовать метод getCurrentUser
для получения данных учетной записи пользователя.
Следующие шаги
После первого входа пользователя в систему создается новая учетная запись пользователя, связанная с его идентификатором Play Games. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении вашего проекта.
В вашей игре вы можете получить UID пользователя Firebase из объекта FirebaseUser
:
Kotlin+KTX
val user = auth.currentUser user?.let { val playerName = it.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 FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = mAuth.getCurrentUser(); String playerName = user.getDisplayName(); // 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 FirebaseUser.getIdToken() instead. String uid = user.getUid();
В правилах безопасности базы данных реального времени и облачного хранилища Firebase вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Чтобы получить информацию об игроке Play Games пользователя или получить доступ к сервисам Play Games, используйте API, предоставляемые Google Play Games SDK .
Чтобы выйти из системы, вызовите FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();