Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Аутентификация с помощью игровых сервисов Google Play на Android

Вы можете использовать сервисы Google Play Games для входа игроков в игру для Android, созданную на Firebase. Чтобы использовать сервисы Google Play Games, войдите в систему с помощью Firebase, сначала войдите в систему с помощью Google Play Games и запросите код аутентификации OAuth 2.0, когда вы это сделаете. Затем передайте код аутентификации в PlayGamesAuthProvider для создания Firebase верительных, который можно использовать для проверки подлинности Firebase.

Прежде чем вы начнете

Настройте свой Android-проект

  1. Если вы еще не сделали, добавить Firebase в свой Android проекта .

  2. Использование Firebase Android Банка Москвы , объявить зависимость для библиотеки Firebase аутентификации Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).

    Кроме того, в рамках настройки аутентификации Firebase вам необходимо добавить в приложение SDK сервисов Google Play.

    Джава

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    С помощью Firebase Android Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

    (Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

    dependencies {
        // Declare 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:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare 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-ktx'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    С помощью Firebase Android Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

    (Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание , что если вы используете несколько библиотеки Firebase в вашем приложении, мы настоятельно рекомендуем использовать спецификации для управления версиями библиотеки, что гарантирует , что все версии совместимы.

    dependencies {
        // Declare 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-ktx:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

Настройте свой проект Firebase

  1. Установка вашей игры SHA-1 отпечаток от настроек страницы консоли Firebase.

    Вы можете получить SHA хэш вашего сертификата подписи с Gradle signingReport команды:

    ./gradlew signingReport

  2. Включите Google Play Games в качестве поставщика услуг входа:

    1. Найдите идентификатор клиента веб-сервера вашего проекта и секрет клиента. Идентификатор клиента веб-сервера идентифицирует ваш проект Firebase для серверов аутентификации Google Play.

      Чтобы найти эти значения:

      1. Откройте проект Firebase в консоли Google API , стр мандатной.
      2. В ИД клиента разделе OAuth 2.0, откройте веб - клиент (авто , созданный Google Service) Детали страницы. На этой странице перечислены идентификатор клиента и секрет вашего веб-сервера.
    2. Затем в консоли Firebase , откройте раздел Проверка подлинности.

    3. На вкладке Входа в методе, включите вход в Play Игры провайдера. Вам нужно будет указать идентификатор клиента веб-сервера вашего проекта и секрет клиента, которые вы получили из консоли API.

  1. В консоли Play Google , откройте приложение или создать.

  2. В разделе Grow, нажмите Play Игры Услуги> Настройка & Management> Конфигурация.

  3. Нажмите кнопку Да, моя игра уже использует Google API , выберите имя вашего проекта Firebase из списка и нажмите Использовать.

  4. На странице конфигурации игры Услуги Play, нажмите кнопку Добавить Credential.

    1. Выберите тип игрового сервера.
    2. В поле клиента OAuth, выберите веб - идентификатор клиента вашего проекта. Убедитесь, что это тот же идентификатор клиента, который вы указали при включении входа в Play Игры.
    3. Сохраните изменения.
  5. Тем не менее на странице конфигурации игры Услуги Play, нажмите кнопку Добавить Credential снова.

    1. Выберите Android тип.
    2. В поле клиента OAuth, выберите Android идентификатор клиента вашего проекта. (Если вы не видите свой идентификатор клиента Android, убедитесь, что вы установили отпечаток SHA-1 вашей игры в консоли Firebase.)
    3. Сохраните изменения.
  6. На странице тестировщиков, добавьте адреса электронной почты всех пользователей , которые должны быть в состоянии войти в вашу игру , прежде чем выпустить его на Play магазине.

Интегрируйте вход в Play Игры в свою игру

Во-первых, интегрируйте вход в Play Игры в свое приложение. См Войти в Android Игры для полных инструкций.

В вашей интеграции, когда вы строите GoogleSignInOptions объект, используйте DEFAULT_GAMES_SIGN_IN конфигурацию и вызов requestServerAuthCode :

Джава

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Котлин + KTX

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

Вы должны передать свой веб - сервер идентификатор клиента к requestServerAuthCode метода. Это идентификатор, который вы указали при включении входа в Play Игры в консоли Firebase.

Аутентифицироваться с Firebase

После добавления входа в Play Games в свое приложение вам необходимо настроить Firebase для использования учетных данных Google, которые вы получаете, когда игрок успешно входит в Play Games.

  1. Во- первых, в вашем знаке, в деятельности в onCreate метод, получить общий экземпляр FirebaseAuth объекта:

Джава

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Котлин + KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. При инициализации Activity проверьте, вошел ли игрок уже в Firebase:

Джава

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

Котлин + KTX

override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    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.
  1. После того, как игрок знаки с Play Games либо молча или в интерактивном режиме , получить код аутентификации от GoogleSignInAccount объекта, обменять его на верительные Firebase, и пройти проверку подлинности с помощью Firebase верительного Firebase:

Джава

// 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);
                    }

                    // ...
                }
            });
}

Котлин + 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)
                }

                // ...
            }
}

Если вызов signInWithCredential успешно можно использовать getCurrentUser метод , чтобы получить данные учетной записи пользователя.

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, привязанная к его идентификатору Play Games. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте.

В вашей игре, вы можете получить пользователь Firebase UID из FirebaseUser объекта:

Джава

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();

Котлин + KTX

val user = auth.currentUser
user?.let {
    val 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 FirebaseUser.getIdToken() instead.
    val uid = user.uid
}

В вашей базе данных в реальном времени и Firebase Cloud правил безопасности хранения, вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Для того, чтобы получить информацию Play Games игрок пользователя или для доступа Play Игры услуг, использовать API , предоставляемые Google Play Games SDK .

Чтобы выйти пользователь, вызовите FirebaseAuth.signOut() :

Джава

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()