Аутентификация платформы для игр Android

Для доступа к функционалу сервисов Google Play Games вашей игре необходимо предоставить учетную запись авторизованного игрока. В этом документе описано, как реализовать удобную аутентификацию в вашей игре.

SDK Play Games Services v2 вносит ряд улучшений, которые увеличивают количество пользователей, авторизованных в вашей игре, и упрощают разработку:

  • Улучшения для пользователей:
    • После выбора учетной записи по умолчанию пользователи проходят аутентификацию без необходимости взаимодействия с каким-либо запросом.
    • Пользователям больше не нужно скачивать приложение Play Games для аутентификации в сервисах Play Games или создания новой учетной записи.
    • Теперь пользователи могут управлять своими учетными записями Play Games Services для нескольких игр с одной страницы.
  • Улучшения для разработчиков:
  • Клиентскому коду больше не нужно обрабатывать процесс аутентификации или выхода из системы, поскольку вход в систему запускается автоматически при старте игры, а управление учетной записью осуществляется в настройках операционной системы.

Интеграция с новым клиентом

В этом разделе показано, как выполнить интеграцию нового клиента с сервисом Play Games Services Sign In v2.

Добавьте зависимость

Добавьте зависимость Play Game Services SDK в корневой файл build.gradle вашего приложения. Если вы используете Gradle, вы можете добавить или обновить зависимость следующим образом:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Укажите идентификатор проекта.

Чтобы добавить идентификатор проекта Play Games Services SDK в ваше приложение, выполните следующие шаги:

  1. В файл AndroidManifest.xml вашего приложения добавьте следующий элемент <meta-data> и атрибуты к элементу <application> :

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Укажите ссылку на строковый ресурс @string/game_services_project_id , используя в качестве значения идентификатор проекта игровых сервисов вашей игры. Идентификатор проекта игровых сервисов можно найти под названием вашей игры на странице «Конфигурация» в консоли Google Play.

  2. В файле res/values/strings.xml добавьте ссылку на строковый ресурс и укажите в качестве значения идентификатор вашего проекта. В Google Play Console идентификатор вашего проекта можно найти под названием вашей игры на странице «Конфигурация» . Например:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

Инициализируйте SDK.

Инициализируйте Play Games SDK в функции обратного вызова onCreate(..) вашего класса Application .

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Получите результат аутентификации.

При запуске игры она всегда будет пытаться аутентифицировать пользователя. Для аутентификации пользователя необходимо убедиться в успешной аутентификации и получить его идентификатор игрока (Player ID).

Для проверки попытки аутентификации вызовите метод GamesSignInClient.isAuthenticated() и используйте addOnCompleteListener для получения результатов. Например:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Предотвратить автоматическое создание профилей.

Вы можете отключить автоматические запросы на создание профиля через файл манифеста. Это позволит пользователям без профиля Play Games Services продолжить загрузку игры без запроса на создание профиля Play Games Services. Для получения дополнительной информации см. раздел «Параметры создания профиля» .

Для использования этой функции необходимо выполнить следующие условия:

  • На устройстве ни в одной из учетных записей Google не создан профиль Play Games Services.
  • Ваша игра интегрирована с Play Games Services SDK com.google.android.gms:play-services-games-v2:21.0.0 или более поздней версии.

Чтобы предотвратить автоматическое появление запросов на создание профиля, выполните следующие действия:

  1. В файле AndroidManifest.xml добавьте тег com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION в элемент <meta-data> и атрибуты к элементу <application> :

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>
    

    Установка этого флага в значение true сообщает Play Games Services, что процесс создания профиля будет обрабатываться вашей игрой. Следовательно, Play Games Services не будет автоматически отображать интерфейс создания профиля для пользователей устройства, у которых нет существующего профиля Play Games Services.

  2. При вызове любого API сервисов Play Games код состояния GamesClientStatusCodes.SIGN_IN_REQUIRED указывает на то, что вызов завершился неудачей, поскольку пользователь не смог пройти автоматическую аутентификацию из-за отсутствия профиля в сервисах Play Games.

    Это позволяет пользователям без профиля Play Games Services продолжить использование реализованных вами методов аутентификации без немедленного запроса на создание профиля Play Games Services. Создание профиля можно инициировать вызовом метода GamesSignInService.signin() .

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. После добавления тега подавления используйте окно logcat для проверки добавления. В выводе logcat содержится сообщение, похожее на следующее: "Игра отказалась от автоматического запроса на создание профиля (с использованием манифеста)".