게임 내에서 PGS Recall API 통합

이 페이지에서는 게임 내에서 Recall API를 구현하는 방법을 설명합니다. 먼저 다룰 내용은 다음과 같습니다. API를 지원하도록 게임 서버와 클라이언트를 설정하고, 토큰을 저장하고 검색하는 방법

게임 서버 설정

Recall API를 호출하는 게임 서버를 Google 서버로 설정합니다.

Play 게임즈 서비스 프로젝트 설정

(아직 완료하지 않은 경우) Google Play 게임즈 서비스 설정의 안내를 따릅니다.

게임의 서비스 계정 설정

서비스 계정 만들기의 안내를 따르세요. 마지막에는 서비스 계정 사용자 인증 정보가 포함된 JSON 파일이 있어야 합니다.

Play 게임즈 서비스용 서버 측 Java 라이브러리 다운로드

최신 google-api-services-games 다운로드 라이브러리 이것을 서버에 업로드합니다

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 설정 를 포함해야 하며 com.google.android.gms:play-services-games-v2:19.0.0 및 Gradle에서 com.google.android.gms:play-services-tasks:18.0.2 이상 파일에서 참조됩니다.

올바른 정보로 Google 서버와 통신하려면 게임 서버로 전송하는 클라이언트 SDK에서 세션 ID를 리콜합니다.

Kotlin

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
  });

게임 서버 내에서 Recall API 사용

서버와 클라이언트를 구성한 후에는 게임 클라이언트에서 게임 서버로 recallSessionID를 전송하고 아래 안내에 따라 Java API를 사용하여 서버 측에서 리콜 토큰을 저장, 검색 또는 삭제할 수 있습니다.

토큰 저장

LinkPersonaRequest 객체를 사용하여 사용자의 캐릭터와 게임 토큰을 저장합니다. GoogleCredential을 사용하여 Google에 전화 걸기 API를 참조하세요. 1:1 카디널리티 따르기 제약 조건이 있으면 한 번에 하나의 캐릭터를 하나의 PGS 프로필에만 연결할 수 있으며, 그 반대의 경우도 마찬가지입니다. 다음과 같이 설정합니다. 해결 정책을 통해 이 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를 가져옵니다. retrieveTokens API에 전달합니다.

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 프로필이 없는 사용자의 경우 다음 단계를 따르세요.

  1. Play 개발자에서 PGS 게임 프로젝트에 프로필 없는 리콜 사용 설정 콘솔을 클릭합니다. 라벨이 지정된 옵션을 선택합니다.
  2. 이 섹션의 뒷부분에서 설명하는 추가 용어를 검토합니다.
  3. 앱에 다음 메타데이터 태그를 추가합니다. 매니페스트를 참조하세요.
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

추가 약관

Google Play 게임즈 서비스 약관 및 Play 게임즈 서비스 약관 서비스 이용 시 다음과 같은 목적으로 Recall API를 사용하는 경우 공유 가능한 PGS 프로필이 없는 사용자 Play 게임즈 서비스 프로필이 없는 최종 사용자의 데이터를 Google에 전송하는 방법 이러한 데이터를 Google과 공유하기 전에 최종 사용자에게 다음과 같은 정보를 제공해야 합니다. 1) 이러한 용도를 위해 Google과 데이터를 공유하는 것을 Play 게임즈 계정 연결 기능, 2) 관리할 설정 사용 가능 여부 예를 들어 Play 게임즈 설정을 통한 공유, 3) Google에서 제공하는 Google 개인정보처리방침에 따라 정책을 준수하고 적절한 최종 사용자를 확보합니다. 공유에 대한 동의를 얻어야 합니다.