На этой странице объясняется, как реализовать API возврата в вашей игре. Сначала он описывает настройку вашего игрового сервера и клиента для поддержки API, а затем рассказывает о том, как хранить и получать токены.
Настройка игрового сервера
Настройте свой игровой сервер для выполнения вызовов API Recall на серверы Google.
Настройте проект игровых сервисов Play.
(Если это еще не выполнено) Следуйте инструкциям в разделе «Настройка игровых сервисов Google Play» .
Настройте сервисную учетную запись для игры
Следуйте инструкциям по созданию сервисной учетной записи . В конце у вас должен получиться файл JSON с учетными данными сервисной учетной записи.
Загрузите серверную библиотеку Java для игровых сервисов Play.
Загрузите последнюю версию библиотеки google-api-services-games
и загрузите ее на свой сервер.
Подготовьте учетные данные для вызовов API отзыва
Дополнительную информацию см. в разделе Подготовка к делегированному вызову API .
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;
// ...
GoogleCredential credential =
GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
.createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
Настройка игрового клиента
Настройте игровой клиент на получение идентификаторов сеансов отзыва, используемых вашим сервером для связи с серверами Google.
Java SDK
Настройте Java SDK в своем клиенте и обязательно включите com.google.android.gms:play-services-games-v2:19.0.0
и com.google.android.gms:play-services-tasks:18.0.2
или выше в вашем файле Gradle.
Чтобы обмениваться с серверами Google правильной информацией, запросите идентификатор сеанса отзыва из клиентского SDK, который вы отправляете на сервер вашей игры:
Котлин
PlayGames.getRecallClient(getActivity()) .requestRecallAccess() .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() } // Send the recallSessionId to your game server
Ява
PlayGames.getRecallClient(getActivity()) .requestRecallAccess() .addOnSuccessListener( recallAccess -> { String recallSessionId = recallAccess.getSessionId(); // Send the recallSessionId to your game server });
Используйте API отзыва на своем игровом сервере.
После настройки сервера и клиента вы можете отправить recallSessionID
из вашего игрового клиента на игровой сервер и следовать приведенным ниже инструкциям, чтобы начать использовать API Java для хранения, получения или удаления токенов отзыва на стороне сервера.
Магазин токенов
Сохраните личность пользователя и игровой токен, используя объект LinkPersonaRequest
. Используйте GoogleCredential
для вызова API Google . Чтобы соблюдать ограничение количества элементов 1:1 , вы можете одновременно связать только одного пользователя с одним профилем PGS и наоборот. Установите политику разрешения на случай, если этот профиль PGS уже связан с другим человеком.
При желании вы можете установить TTL для токена, который определяет, как долго токен действителен, с помощью объекта Durations
. Вы можете установить это с помощью SetTtl()
(как показано ниже), который устанавливает дату истечения срока действия на основе периода времени, указанного в методе, или setExpireTime()
, который позволяет вам установить точное время истечения срока действия токенов.
Вы должны зашифровать личность и игровой токен, и они не могут содержать личную информацию. Строки персонажей и токенов могут иметь длину не более 256 символов, и на каждого игрока в каждой игре может храниться не более 20 жетонов или персонажей.
В определенный момент времени на каждого игрока может быть сохранен только один жетон. Если вы попытаетесь сохранить другой токен с той же личностью, система перезапишет исходный токен.
import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.protobuf.util.Durations;
// ...
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line
LinkPersonaRequest linkPersonaRequest =
LinkPersonaRequest.newBuilder()
.setSessionId(recallSessionId)
.setPersona(persona)
.setToken(token)
.setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
.setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
.setTtl(Durations.fromDays(7)) // Optionally set TTL for token
.build();
LinkPersonaResponse linkPersonaResponse =
gamesApi.recall().linkPersona(linkPersonaRequest).execute();
if (linkPersonaResponse.getState() == LINK_CREATED) {
// success
}
Получить токены
Чтобы получить токен отзыва, получите recallSessionId
от клиента и передайте его в API retrieveTokens
:
import com.google.api.services.games.Games.Recall.RetrieveTokens;
// ...
String recallSessionId = ... // recallSessionID from game client
RetrievePlayerTokensResponse retrievePlayerTokensResponse =
gamesApi.recall().retrieveTokens(recallSessionId).execute();
for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
String token recallToken.getToken();
// Same string as was written in LinkPersona call
// decrypt and recover in-game account
}
Удалить токен отзыва
При необходимости вы также можете удалить токен отзыва с помощью следующего вызова:
import com.google.api.services.games.Games.Recall.UnlinkPersona;
// ...
String recallSessionId = ...
String persona = ...
String token = ...
Games gamesApi =
new Games.Builder(httpTransport, JSON_FACTORY, credential).build();
UnlinkPersonaRequest unlinkPersonaRequest =
UnlinkPersonaRequest.newBuilder()
.setSessionId(recallSessionId)
.setPersona(persona)
// .setToken(token) - alternatively set token, but not both
.build();
UnlinkPersonaResponse unlinkPersonaResponse =
gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();
// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();
Включить беспрофильный режим
Вы можете включить ограниченную функциональность Recall API для пользователей, у которых нет профилей PGS, выполнив следующие действия:
- Включите беспрофильный возврат для вашего игрового проекта PGS в консоли разработчика Play.
- Ознакомьтесь с дополнительными условиями , описанными далее в этом разделе.
- Добавьте следующий тег метаданных в манифест вашего приложения :
<meta-data
android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
android:value="true" />
Дополнительные условия
Помимо соблюдения Условий использования игровых сервисов Play , вы соглашаетесь с тем, что если вы используете API отзыва для пользователей без профиля PGS, который позволяет передавать данные конечных пользователей Google без наличия у них профиля игровых сервисов Play, вы должны: прежде чем передавать такие данные в Google, предоставьте конечному пользователю соответствующее уведомление с описанием 1) вашего обмена данными с Google для включения функции привязки учетной записи Play Games, 2) наличия настроек для управления таким обменом, например, через Play Games. настройки и 3) обработку таких данных в соответствии с Политикой конфиденциальности Google и получить соответствующее согласие конечного пользователя на такой обмен, которое соответствует всем применимым законодательным требованиям.