В этом руководстве описывается, как перенести клиентский код с Play Games Services v1 на v2.
Новый SDK содержит четыре основных изменения, повышающих успешность входа в систему, о которых вам следует знать:
- Вход в систему запускается автоматически при запуске игры. Вместо использования
GoogleSignInClient
изGoogleSignIn
SDK для выполнения входа в систему вы можете использоватьGamesSignInClient.isAuthenticated()
для получения результата попытки автоматического входа в систему. - Классам Client Factory больше не потребуется передавать объект
GoogleSignInAccount
. Дополнительные области OAuth не могут быть запрошены (GAMES_LITE
будет запрошена автоматически). - Токены аутентификации теперь предоставляются с помощью
GamesSignInClient.requestServerSideAccess()
в SDK Play Games Services. - Метод выхода удален, и нам больше не потребуется внутриигровая кнопка для входа или выхода из игровых сервисов 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);
}
Удалить вызовы для входа и выхода
Если вы не укажете никаких дополнительных областей, миграция вашего варианта использования должна быть простой.
Удалите вызовы входа в систему с помощью 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(). } });
Удалите все вызовы для выхода, поскольку управление учетной записью теперь находится в настройках ОС и приложения Play Games.
Если игрок успешно вошел в систему, удалите кнопку входа в Play Игры из своей игры. Если пользователь решает не входить в систему при запуске игры, вы можете при желании продолжить отображение кнопки со значком Play Games и запустить процесс входа в систему с помощью
GamesSignInClient.signIn()
.Убедившись, что пользователь вошел в систему, вы можете получить идентификатор игрока, чтобы идентифицировать пользователя.
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
Удалите зависимость от 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 with 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