크로스-플랫폼 인벤토리

작동 방식

교차 플랫폼 인벤토리를 통해 게임 개발자는 다른 플랫폼 (Steam, EGS, PlayStation, XBox, 등) 간에 사용자 인벤토리를 동기화할 수 있으며, 사용자 인벤토리 및 잔고를 관리하고. 관련 데이터를 수집할 수 있습니다.

다음 과정은 동기화를 보장합니다:

  1. 플레이어가 플랫폼 계정을 다른 플랫폼에서 플레이어를 식별하는데 사용되는 주 계정에 연동합니다.
  2. 엑솔라는 플랫폼 계정을 주 계정에 연동하고 교차 플랫폼 인벤토리 동기화를 관리하는 메커니즘을 제공합니다.

솔루션은 다음 요소를 포함합니다:

  • 게임 클라이언트
  • 게임 서버
  • 계정 연동 UI가 포함된 웹 애플리케이션
  • 주 계정 제공 및 연동 메커니즘을 위한엑솔라 로그인
  • 유저 인벤토리 보관을 위한 엑솔라 플레이어 인벤토리

사용자 플로우

플랫폼 계정(스팀 혹은 EGS)을 주 계정에 연동하려면, 엑솔라 로그인 계정이나 게임 콘솔 플랫폼의 계정 연동 알고리즘을 사용하여 게임 내에서 유저 식별을 실시해야 합니다.

게임 콘솔 계정을 주 계정에 연동하는 알고리즘은 다음과 같습니다:

  1. 플레이어가 처음으로 게임 콘솔 플랫폼에서 게임에 접속합니다.
  2. 게임은 플랫폼 계정을 주 계정에 연결하라는 메시지를 표시합니다.
  3. 플레이어가 동의한다면:
    1. 플레이어는 사이드 애플리케이션(예를 들어 웹사이트나 모바일 애플리케이션)으로 이동하고, 사이드 애플리케이션에서 주 계정을 인증하거나 생성할 수 있습니다.
    2. 애플리케이션에서 인증이 성공적으로 끝나면, 플레이어는 알파벳과 숫자로 구성된 계정 연동 코드를 받습니다.
  4. 플레이어는 게임의 콘솔 버전으로 돌아가서 코드를 입력합니다.
  5. 주 계정과 플랫폼 계정이 연동되고 게임이 확인 메시지를 표시합니다.
  6. 플랫폼의 플레이어 인벤토리는 주 계정의 인벤토리와 동기화됩니다.

Note: 프리미엄 화폐(현금으로 구매한 화폐)는 인벤토리에서 동기화되지 않습니다. 콘솔 플랫폼 규정에 따라, 플레이스테이션, 엑스박스, 닌텐도 스위치 게임 콘솔에서 구매한 프리미엄 화폐는 따로 보관되거나 저장되지 않습니다.
Notice: 한 번 연동한 계정은 연동 해제가 불가합니다. 또한 처음 접속 시 유저가 계정 연동을 거부한다면 추후에 계정 연동이 불가합니다.

사용자

게임을 여러 플랫폼에 출시하고 플레이어가 어떤 플랫폼에서든 구매한 제품과 보상에 접근하도록 하여 팬 플레이어층을 확보하려는 게임 개발자.

Note: 솔루션은 게임이 두 번째 퍼블리싱 플랫폼에 출시되기 전에만 연결될 수 있습니다. 예를 들어 게임이 PC 플랫폼에 출시되었고 플레이스테이션에 출시될 예정이라면, 게임이 플레이스테이션에 출시되기 전에 교차 플랫폼 인벤토리를 연결해야 합니다.

획득 방법

교차 플랫폼 인벤토리를 연결하는 방법:

  1. 플레이어 인벤토리를 연결하세요. 서버 메소드를 위해 기본 접근 인증을 실시하고, 클라이언트 메소드를 위해 OAuth 2.0 프로토콜에 기반한 엑솔라 로그인 인증을 실시하세요. OAuth 2.0 인증 기반 프로토콜은 Login API 메소드에 접근하고 계정 연동 메소드를 실시하기 위해 필요합니다.
  2. 다음을 포함한 계정 연동 UI를 제공하세요:
    1. 게임 서버 기반인증인벤토리 관리
    2. 게임 클라이언트 기반 인증인벤토리 관리
    3. 계정 연동 메소드

Note: 이미 게임 서버에서 계정 연동을 실시했다면, 유저 인벤토리 동기화를 위해 플레이어 인벤토리를 설정하기만 하면 됩니다.

계정 연동 UI

계정 연동 UI는 다음과 같은 기능을 제공 해야 합니다:

  • 플랫폼 계정을 주 계정에 연동하라는 메시지 표시 기능
  • 계정 연동을 거부하거나 동의하는 기능
  • 유저가 연동을 원할 시 계정 연동을 위한 코드를 제출하는 기능
  • 계정 연동에 이용되는 모바일이나 웹 애플리케이션 URL을 표시하는 기능

주 계정에서 유저를 인증하는 메커니즘은 다음과 같습니다:

  1. 로그인 위젯을 애플리케이션에 통합시키세요.
  2. 유저가 위젯을 통해 인증할 때 JWT가 애플리케이션으로 전달됩니다. JWT를 애플리케이션에서 연동 코드 획득과 애플리케이션 UI에 코드 표시를 위한 메소드로 전달하는 기능을 실행하세요.
  3. 게임 서버 측에서 JWT를 통해 인증을 실행하세요.
  4. 유저가 게임의 콘솔 버전에 접속하고 계정 연동 코드를 제출할 때 토큰, 콘솔 플랫폼의 user_id와 플랫폼 아이디를 주 계정에 연동을 위한 메소드로 전달하기를 실시하세요.

Note: 존재하는 계정을 엑솔라 스토리지로 내보내려면, 프로젝트의 계정 관리자에게 문의하거나 am@xsolla.com로 연락하세요.

게임 서버에서 인증

게임 서버에서 플레이어 인벤토리를 관리하기 위한 Login API 메소드에 접근하기 위해서는 OAuth2.0 인증과 서버 접근 토큰 얻기를 설정해야 합니다.

Note: client_idclient_secret를 얻으려면 프로젝트의 계정 관리자에 문의하거나 am@xsolla.com로 연락하세요.

요청

Copy
Full screen
Small screen
<?php
$uri = 'https://login.xsolla.com/api/oauth2/token';
$body = [
    'grant_type' => 'client_credentials',
    'client_id' => 1,
    'client_secret' => 'client_secret'
];

$headers = [
    'Content-type: application/x-www-form-urlencoded'
];

$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, http_build_query($body));

curl_setopt($request, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($request);
print_r($response);

응답

Copy
Full screen
Small screen
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",           
    "token_type":"bearer",
    "expires_in":3600,
    "scope": ""
}

게임 서버에서 플레이어 인벤토리 관리하기

인벤토리 관리 메소드는 다음 서버 메소드를 포함합니다:

반드시 플랫폼 유저의 user_id와 플랫폼 아이디를 메소드에 전달해야 합니다.

게임 클라이언트에서 인증

게임 클라이언트의 플레이어 인벤토리를 관리할 Auth by Custom ID API 메소드 획득을 실시하세요. 요청에서 다음 파라미터를 전달하세요:

  • server_custom_id — 게임의 고유 유저 식별자
  • social_profile->user_id — 플랫폼의 고유 유저 식별자

요청

Copy
Full screen
Small screen
<?php
$uri = 'https://login.xsolla.com/api/users/login/server_custom_id';
$queryParams = [
    'publisher_project_id' => 44056
];
$queryParamsString = '?' . http_build_query($queryParams);

$body = '
    {
        "server_custom_id": "1234567890asdfghjkl",
        "social_profile": {
          "platform": "xbox_live",
          "user_id": "4352354"
        }
    }
';

$headers = [
    'Content-type: application/json',
    'x-server-authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
];

$request = curl_init($uri . $queryParamsString);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($request);

응답

Copy
Full screen
Small screen
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

Note: JWT를 얻기 위해 유저 토큰화 메소드도 사용할 수 있습니다.

게임 클라이언트에서 플레이어 인벤토리 관리하기

인벤토리 관리 메소드는 다음 클라이언트 메소드를 포함합니다:

콘솔 플랫폼의 플레이어 인벤토리 관리 방법:

  1. 콘솔 플랫폼 규정에 따라 콘솔 퍼블리싱 플랫폼에서 프리미엄 화폐 잔고를 보관하기 위한 클라이언트 메소드로 플랫폼 아이디를 전송하세요.
  2. 콘솔 클라이언트에서 유저 인벤토리를 관리하기 위해 게임 서버에서 다음의 과정을 실시하세요:
    1. 게임이 유저 토큰화를 위한 서버 접근 토큰을 받습니다.
    2. 게임은 플랫폼 유저의 user_id와 플랫폼 아이디를 통해 JWT를 받습니다.
    3. 게임은 특정 클라이언트 메소드로 JWT를 전달합니다.

계정 연동 메소드

연동 코드 가져오기

연동 코드를 얻어 유저에게 전달하기 위해서 Create Code for Linking Accounts API 메소드를 적용하세요.

요청

Copy
Full screen
Small screen
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
    if (this.readyState === this.DONE) {
        console.log(this.responseText);
    }
});
xhr.open("GET", "https://login.xsolla.com/api/users/account/code");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");
xhr.send(data);

응답

Copy
Full screen
Small screen
{
  "code": "123456"
}

주 계정에 연동하기

Link Accounts by Code API 메소드를 실행하세요:

  • code — 연동 코드
  • publisher_project_id — 게시자 계정의 프로젝트 ID
  • user_id — 플랫폼의 유저 아이디

메소드를 불러오기 전에 다음 과정을 마쳤는지 확인하세요:

  1. 계정 연동 코드를 표시할 UI와 받은 코드를 입력할 양식을 적용했음.
  2. 서버 접근 토큰 획득을 위한 메소드를 적용했음.
  3. 연동 코드 획득을 위한 메소드를 적용했음.

Note: 플랫폼 계정을 주 계정에 연동하기 위해 엑솔라에 게임 계정 연결 API 메소드를 사용할 수도 있습니다.

요청

Copy
Full screen
Small screen
<?php
$uri = 'https://login.xsolla.com/api/users/account/link';
$body = '
    {
        "code": "234155",
        "platform": "xbox_live",
        "publisher_project_id": "12423354",
        "user_id": "4352354"
    }
';

$headers = [
    'Content-type: application/x-www-form-urlencoded',
    'x-server-authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
];

$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($request);

응답

Copy
Full screen
Small screen
204 OK

플랫폼 목록

플랫폼플랫폼 아이디주석
플레이스테이션 네트워크playstation_network-
엑스박스 라이브xbox_live-
독립형 PCpc_standalone-
닌텐도 eShopnintendo_shop-
구글 플레이google_play-
애플 스토어app_store_ios-
독립형 안드로이드android_standalone이 게임은 스토어 외부에서 독립적으로 발매되었습니다.
독립형 IOSios_standalone이 게임은 스토어 외부에서 독립적으로 발매되었습니다.
기타 안드로이드android_other이 게임은 구글 플레이의 대체 스토어에서 발매되었습니다.
기타 IOSios_other이 게임은 앱스토어의 대체 스토어에서 발매되었습니다.
기타 PCpc_other-
엑솔라xsolla-