Переход на вход в игровые сервисы Play v2

На этой странице описано, как перенести клиентский код с Play Games Services v1 на v2.

Новый SDK содержит четыре основных изменения, повышающих успешность входа в систему, о которых вам следует знать:

  1. Вход в систему запускается автоматически при запуске игры. Вместо использования GoogleSignInClient из GoogleSignIn SDK для выполнения входа в систему вы можете использовать GamesSignInClient.isAuthenticated() для получения результата попытки автоматического входа в систему.
  2. Классам Client Factory больше не потребуется передавать объект GoogleSignInAccount . Дополнительные области OAuth не могут быть запрошены ( GAMES_LITE и SCOPE_APPFOLDER будут запрошены автоматически).
  3. Токены аутентификации теперь предоставляются с помощью GamesSignInClient.requestServerSideAccess() в SDK Play Games Services.
  4. Метод выхода удален, и нам больше не потребуется внутриигровая кнопка для входа или выхода из игровых сервисов Play.

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

Нацельтесь на новый репозиторий SDK Maven.

Если вы используете систему сборки Gradle, это можно сделать, изменив зависимость на артефакт com.google.android.gms:play-services-games-v2:+ в файле build.gradle вашего модуля. Например:

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

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

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

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

...

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

Удалить вызовы для входа и выхода

Если вы не укажете никаких дополнительных областей, кроме GAMES , GAMES_LIGHT и SCOPE_APPFOLDER , миграция вашего варианта использования должна быть простой.

  1. Удалите вызовы входа в систему с помощью API GoogleSignIn. Вход в систему всегда будет выполняться при запуске игры. Вместо этого прослушайте результат попытки автоматического входа в систему с помощью GamesSignInClient.isAuthenticated() .

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Удалите все вызовы для выхода, поскольку управление учетной записью теперь находится в настройках ОС и приложения Play Games.

  3. Если игрок успешно вошел в систему, удалите кнопку входа в Play Игры из своей игры. Если пользователь решает не входить в систему при запуске игры, вы можете при желании продолжить отображение кнопки со значком Play Games и запустить процесс входа в систему с помощью GamesSignInClient.signIn() .

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

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Удалите зависимость от API GoogleSignIn, если он больше не используется.

Обновить имена классов клиентов

При создании клиентов (например LeaderboardsClient или AchievementsClient ) используйте PlayGames.getFooClient() вместо Games.getFooClient() .

Запросить доступ на стороне сервера

При запросе доступа на стороне сервера используйте GamesSignInClient.requestServerSideAccess() вместо GoogleSignInAccount.getServerAuthCode() .

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Удалить лишние области

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

Миграция с GoogleApiClient

Для более старых существующих интеграций ваша игра может зависеть от варианта GoogleApiClient API SDK Play Games Services. В конце 2017 года эта технология была упразднена и заменена клиентами без установления соединения. Для миграции вы можете заменить класс GoogleApiClient эквивалентом без установления соединения. Затем вам также придется следовать приведенным выше инструкциям, чтобы перенести игру с версии 1 на версию 2. Ниже приведено отображение общих классов:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes