이 페이지에서는 게임 내에서 Recall API를 구현하는 방법을 설명합니다. 먼저 API를 지원하도록 게임 서버 및 클라이언트를 설정하는 방법을 살펴보고, 토큰을 저장하고 검색하는 방법을 알아봅니다.
게임 서버 설정
Recall API를 호출하는 게임 서버를 Google 서버로 설정합니다.
1. Play 게임즈 서비스 프로젝트 설정
(아직 완료하지 않은 경우) Google Play 게임즈 서비스 설정의 안내를 따릅니다.
2. 게임의 서비스 계정 설정
서비스 계정 만들기의 안내를 따르세요. 마지막에는 서비스 계정 사용자 인증 정보가 포함된 JSON 파일이 있어야 합니다.
3. PlayGamesServices용 서버 측 Java 라이브러리 다운로드
최신 google-api-services-games 라이브러리를 다운로드하여 서버에 업로드합니다.
4. Recall 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 서버와 통신하는 데 사용하는 리콜 세션 ID를 검색하도록 게임 클라이언트를 설정합니다.
Java SDK
클라이언트 내에서 Java SDK를 설정하고 gradle 파일에 com.google.android.gms:play-services-games-v2:19.0.0
및 com.google.android.gms:play-services-tasks:18.0.2
이상을 포함해야 합니다.
올바른 정보로 Google 서버와 통신하려면 클라이언트 SDK에서 리콜 세션 ID를 요청해야 하며, 이 ID는 게임 서버로 전송됩니다.
Kotlin
PlayGames.getRecallClient(getActivity()) .requestRecallAccess() .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() } // Send the recallSessionId to your game server
Java
PlayGames.getRecallClient(getActivity()) .requestRecallAccess() .addOnSuccessListener( recallAccess -> { String recallSessionId = recallAccess.getSessionId(); // Send the recallSessionId to your game server });
Unity SDK
아직 완료하지 않았다면 클라이언트 내에서 Unity SDK를 설정합니다.
올바른 정보로 Google 서버와 통신하려면 클라이언트 SDK에서 리콜 세션 ID를 요청하고 이를 게임 서버로 전송해야 합니다.
PlayGamesPlatform.Instance.RequestRecallAccess(
recallAccess => {
string recallSessionId = recallAccess.sessionId;
// Send the recallSessionId to your game server
});
게임 서버 내에서 Recall API 사용
서버와 클라이언트를 구성한 후에는 게임 클라이언트에서 게임 서버로 recallSessionID
를 전송하고 아래 안내에 따라 Java API를 사용하여 서버 측에서 리콜 토큰을 저장, 검색 또는 삭제할 수 있습니다.
토큰 저장
사용자의 캐릭터와 게임 토큰은 LinkPersonaRequest
객체를 사용하여 저장할 수 있습니다. GoogleCredential
을 사용하여 Google API를 호출해야 합니다. 자세한 내용은 Google API 호출을 참고하세요. 1:1 카디널리티 제약 조건에 따라 한 번에 하나의 캐릭터를 하나의 PGS 프로필에만 연결할 수 있으며 반대의 경우도 마찬가지입니다. 이 PGS 프로필이 이미 다른 캐릭터와 연결된 경우 해결 정책을 설정해야 합니다.
선택적으로 토큰에 TTL을 설정할 수 있습니다. 이는 Durations 객체를 사용하여 토큰의 유효 기간을 선언합니다. 메서드에 지정된 시간으로부터 만료일을 설정하는 SetTtl()
을 사용하거나(아래 참고) 토큰이 만료되는 정확한 시간을 설정할 수 있는 setExpireTime()
을 사용하여 이를 설정할 수 있습니다.
캐릭터와 게임 토큰은 암호화해야 하며 개인 식별 정보를 포함할 수 없습니다. 캐릭터 및 토큰 문자열은 최대 256자(영문 기준)일 수 있으며, 게임당 플레이어별로 저장되는 토큰 또는 캐릭터는 최대 20개 있을 수 있습니다.
주어진 시간에 플레이어별로 캐릭터당 토큰은 하나만 저장할 수 있습니다. 동일한 캐릭터로 다른 토큰을 저장하려고 하면 원래 토큰을 덮어씁니다.
import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.api.services.games.model.LinkPersonaRequest;
import com.google.api.services.games.model.LinkPersonaResponse;
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
를 클라이언트에서 가져와서 retrieveTokens
API로 전달합니다.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrievePlayerTokensResponse;
import com.google.api.services.games.model.RecallToken;
// ...
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
}
개발자 계정이 소유한 모든 게임의 최근 리콜 토큰
개발자가 소유한 모든 게임에서 저장된 가장 최근 토큰 검색
recallSessionId
앱을 설치해야 합니다.
다음과 같이 lastTokenFromAllDeveloperGames
API에 전달합니다.
다음 코드 스니펫에 나와 있습니다. 응답의 일부로
연결된 애플리케이션 ID
이 토큰으로 교체합니다.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveDeveloperGamesLastPlayerTokenResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;
// ...
String recallSessionId = ... // recallSessionID from game client
RetrieveDeveloperGamesLastPlayerTokenResponse response =
gamesApi.recall().lastTokenFromAllDeveloperGames(recallSessionId)
.execute();
if (response.hasGamePlayerToken()) {
GamePlayerToken gamePlayerToken = response.getGamePlayerToken();
// The ID of the application that the token is associated with.
String applicationId = gamePlayerToken.getApplicationId();
// Same string as was written in LinkPersona call.
RecallToken recallToken = gamePlayerToken.getRecallToken();
// Decrypt and recover in-game account.
}
개발자 계정이 소유한 주어진 게임 목록의 모든 리콜 토큰
소유 중인 게임 목록과 연결된 모든 토큰 검색
Play Console에서 개발자 계정에 로그인한 경우 recallSessionId
를 다운로드하세요.
클라이언트에서 가져와서 gamesPlayerTokens
API에 전달합니다.
애플리케이션 ID 목록입니다.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveGamesPlayerTokensResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;
// ...
String recallSessionId = ... // recallSessionID from game client
// Application IDs for which you would like to retrieve the recall tokens.
List<String> applicationIds = ...
RetrieveGamesPlayerTokensResponse response =
gamesApiClient
.recall()
.gamesPlayerTokens(recallSessionId)
.setApplicationIds(applicationIds)
.execute();
for (GamePlayerToken gamePlayerToken : response.getGamePlayerTokens()) {
// The ID of the application that the token is associated with.
String applicationId = gamePlayerToken.getApplicationId();
// Same string as was written in LinkPersona call.
RecallToken recallToken = gamePlayerToken.getRecallToken();
// Decrypt and recover in-game account.
}
리콜 토큰 삭제
필요한 경우 다음 호출을 사용하여 리콜 토큰을 삭제할 수도 있습니다.
import com.google.api.services.games.Games;
import com.google.api.services.games.model.UnlinkPersonaRequest;
import com.google.api.services.games.model.UnlinkPersonaResponse;
// ...
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();
boolean unlinked = unlinkPersonaResponse.isUnlinked();
프로필리스 모드 사용 설정
제한된 Recall API 기능을 사용 설정할 수 있습니다. PGS 프로필이 없는 사용자의 경우 다음 단계를 따르세요.
- Play 개발자에서 PGS 게임 프로젝트에 프로필 없는 리콜 사용 설정 콘솔을 클릭합니다.
- 이 섹션의 뒷부분에서 설명하는 추가 용어를 검토합니다.
- 앱에 다음 메타데이터 태그를 추가합니다. 매니페스트를 참조하세요.
<meta-data
android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
android:value="true" />
추가 약관
Google Play 게임즈 서비스 약관 및 Play 게임즈 서비스 약관 PGS 프로필이 없는 사용자를 위해 Recall API를 사용하여 Play 게임즈 서비스 프로필이 없는 최종 사용자의 데이터를 Google에 전송하는 방법 이러한 데이터를 Google과 공유하기 전에 1) 이러한 용도를 위해 Google과 데이터를 공유하는 것을 Play 게임즈 계정 연결 기능, 2) 관리할 설정 사용 가능 여부 예를 들어 Play 게임즈 설정을 통한 공유, 3) Google에서 제공하는 Google 개인정보처리방침에 따라 정책을 준수하고 적절한 최종 사용자를 확보합니다. 공유에 대한 동의를 얻어야 합니다.