クロスプラットフォームのインベントリを設定する方法

どのように動作するか

クロスプラットフォームインベントリを使用すると、ゲーム開発者はさまざまなプラットフォーム(Steam、EGS、PlayStation、XBoxなど)のゲーム内のユーザーインベントリを同期し、ユーザーインベントリとバランスを管理し、それらに関するデータを収集できます。

次の手順により、同期が保証されます:

  1. プレーヤーは、プラットフォームアカウントを、さまざまなプラットフォームでプレーヤーを識別するために使用されるメインアカウントにリンクします。
  2. エクソラは、プラットフォームアカウントをメインアカウントにリンクし、クロスプラットフォームの在庫同期を管理するためのメカニズムを提供します。

ソリューションには次のコンポーネントが含まれます:

  • ゲームクライアント
  • ゲームサーバー
  • アカウントリンクUIを備えたウェブアプリケーション
  • メインアカウントとリンクメカニズムを提供するエクソラログイン
  • ユーザーインベントリを保存するためのエクソラプレイヤーインベントリ

ユーザーフロー

プラットフォームアカウント(スチームまたはEGS)をメインアカウントにリンクするには、エクソラログインアカウントまたはゲームコンソールプラットフォームでアカウントをリンクするためのアルゴリズムを使用して、ゲームにユーザーIDを実装する必要があります。

ゲームコンソールアカウントをメインアカウントにリンクするアルゴリズムは次のとおりです:

  1. プレーヤーはゲームコンソールプラットフォームで初めてゲームに参加します。
  2. ゲームは、プラットフォームアカウントをメインアカウントにリンクすることを提案するメッセージを表示します。
  3. プレーヤーがアクションを確認した場合:
    1. それらはサイドアプリケーション(ゲームのWebサイトやモバイルアプリなど)にリダイレクトされ、そこでメインアカウントを認証または作成できます。
    2. アプリでの認証に成功すると、プレーヤーはアカウントをリンクするための英数字コードを受け取ります。
  4. プレーヤーはゲームのコンソールバージョンに戻り、コードを入力します。
  5. メインアカウントとプラットフォームアカウントのリンクとゲームコンソールは確認メッセージが表示されます。
  6. プラットフォーム上のプレーヤーインベントリは、メインアカウントにリンクされたインベントリと同期されます。

Note
プレミアム通貨(リアルマネーで購入した通貨)は在庫で同期しません。コンソールプラットフォームの規制によると、PlayStation、Xbox、およびNintendo Switchゲームコンソールを介して購入したプレミアム通貨はスタックされず、個別に保存されます。
Notice
リンクされたアカウントのリンクを解除することはできません。また、ユーザーが初めてゲームに参加するときにアカウントのリンクを拒否した場合、今後はリンクできなくなります。

使用に適した方

ゲーム開発者がゲームのマルチプラットフォームリリースを計画して、プレイヤーがあらゆるプラットフォームで購入や報酬にアクセスできるようにすることで、忠実なプレイヤー基盤を確立したいと考えています。

Note
ソリューションは、ゲームが第二の公開プラットフォームでリリースされる前にのみ接続できます。たとえば、ゲームがPCプラットフォームでリリースされ、PlayStationでリリースされる場合、PlayStationでリリースする前にクロスプラットフォームインベントリを接続する必要があります。

入手方法

クロスプラットフォームインベントリを接続するには:

  1. プレーヤーインベントリへ接続する。サーバーメソッドを操作するための基本的なアクセス認証と、クライアントメソッドを操作するためのOAuth 2.0プロトコルに基づくエクソラログイン認証を実装します。Login APIメソッドにアクセスしてアカウントリンクメソッドを実装するには、OAuth 2.0プロトコルベースの認証も必要です。
  2. 以下を含むアカウントリンクUIを実装します:
    1. ゲームサーバーベースの認証インベントリ管理
    2. ゲームクライアントベースの認証インベントリ管理
    3. アカウントのリンク方法

Note
ゲームサーバー側ですでにアカウント同期を実装している場合は、ユーザーインベントリの同期のため、プレイヤーインベントリのセットアップは十分です。

アカウントリンクUI

アカウントリンクUIは、次の機能を提供する必要があります:

  • プラットフォームアカウントをメインアカウントにリンクするメッセージを表示する機能
  • アカウントのリンクに同意または拒否する機能
  • ユーザーがリンクすることに同意した場合、アカウントをリンクするためのコードを送信する機能
  • アカウントのリンクに使用されるモバイルまたはWebアプリケーションのURLを表示する機能

メインアカウントでユーザーを認証するメカニズムは次のとおりです:

  1. ログインウィジェットをアプリと統合します。
  2. ユーザーがウィジェットを介して認証すると、JWTがアプリに渡されます。JWTをアプリからメソッドに渡して、リンクコードを取得し、アプリのUIにコードを表示する機能を実装します。
  3. ゲームサーバー側のJWTを介して認証を実装します。
  4. ユーザーがゲームのコンソールバージョンを入力し、アカウントをリンクするためのコードを送信するときに、実装はトークン、user_idをコンソールプラットフォームに渡し、およびメインアカウントにリンクするためのメソッドにプラットフォームIDを渡します。

Note
既存のアカウントをエクソラストレージにエクスポートする場合は、プロジェクトのアカウントマネージャーに連絡するか、am@xsolla.comに連絡してください。

ゲームサーバーでの認証

ゲームサーバー上のプレーヤーインベントリを管理するためのLogin APIメソッドにアクセスするには、OAuth 2.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とプラットフォームIDを渡す必要があります。

ゲームクライアントでの認証

Auth by custom IDAPIメソッドを実装して、ゲームクライアントのプレーヤーインベントリを管理します。 リクエストで次のパラメータを渡します:

  • 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
User tokenizationメソッドを使用してJWTを取得することもできます。

ゲームクライアントでのプレーヤーインベントリの管理

インベントリ管理メソッドには、次のクライアントメソッドが含まれます:

コンソールプラットフォームでプレーヤーインベントリを管理するには:

  1. コンソールプラットフォームの規制に従って、コンソール発行プラットフォームにプレミアム通貨の残高を保存するために、クライアントメソッドへのプラットフォームIDの受け渡しを実装します。
  2. コンソールクライアントでユーザーのインベントリを管理するには、ゲームサーバーに次の手順を実装します:
    1. ゲームは、ユーザーのトークン化のためにサーバーアクセストークンを受け取ります。
    2. ゲームは、プラットフォーム上のユーザーのuser_idとプラットフォームIDによってJWTを受け取ります。
    3. ゲームは、指定されたクライアントメソッドにJWTを渡します。

アカウントリンクメソッド

リンクコードを取得する

Create code for linking accountsAPIメソッドを実装して、リンクコードを取得してユーザーに渡します。

リクエスト

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 codeAPIメソッドを実装する場所:

  • code-リンクコード
  • publisher_project_id-パブリッシャーアカウントからのプロジェクトID
  • user_id-プラットフォーム上のユーザー識別子

メソッドを呼び出す前に、次の手順を完了していることを確認してください:

  1. アカウントリンクコードを表示するためのUIと、受信したコードを入力するためのフォームを実装しました。
  2. サーバーアクセストークンを取得するためのメソッドを実装しました。
  3. リンクコードを取得するためのメソッドを実装しました。

Note
Connect game account to XsollaAPIメソッドを使用して、プラットフォームアカウントをメインアカウントにリンクすることもできます。

リクエスト

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

プラットフォームリスト

プラットホームプラットフォームIDコメント
PlayStationネットワークplaystation_network-
XBox Livexbox_live-
PCスタンドアロンpc_standalone-
Nintendo eショップnintendo_shop-
Google Playgoogle_play-
Apple Storeapp_store_ios-
Androidスタンドアロンandroid_standaloneゲームはストア以外で個別に公開されます。
IOSスタンドアロンios_standaloneゲームはストア以外で個別に公開されます。
Androidその他android_otherゲームはPlayMarketの代替ストアで公開されます。
IOSその他ios_otherゲームはAppStoreの代替ストアで公開されます。
PCその他pc_other-
エクソラxsolla-
この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
このページを評価する
このページを評価する
改善できることはありますか?

答えたくない

ご意見ありがとうございました!
最終更新日: 2021年6月25日

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!