クロスプラットフォームのインベントリを設定する方法
どのように動作するか
クロスプラットフォームインベントリを使用すると、ゲーム開発者はさまざまなプラットフォーム(Steam、EGS、PlayStation、XBoxなど)のゲーム内のユーザーインベントリを同期し、ユーザーインベントリとバランスを管理し、それらに関するデータを収集できます。
次の手順により、同期が保証されます:
- プレーヤーは、プラットフォームアカウントを、さまざまなプラットフォームでプレーヤーを識別するために使用されるメインアカウントにリンクします。
- エクソーラは、プラットフォームアカウントをメインアカウントにリンクし、クロスプラットフォームの在庫同期を管理するためのメカニズムを提供します。
ソリューションには次のコンポーネントが含まれます:
- ゲームクライアント
- ゲームサーバー
- アカウントリンクUIを備えたウェブアプリケーション
- メインアカウントとリンクメカニズムを提供するエクソーラログイン
- ユーザーインベントリを保存するためのエクソーラプレイヤーインベントリ
ユーザーフロー
プラットフォームアカウント(スチームまたはEGS)をメインアカウントにリンクするには、エクソーラログインアカウントまたはゲームコンソールプラットフォームでアカウントをリンクするためのアルゴリズムを使用して、ゲームにユーザーIDを実装する必要があります。
ゲームコンソールアカウントをメインアカウントにリンクするアルゴリズムは次のとおりです:
- プレーヤーはゲームコンソールプラットフォームで初めてゲームに参加します。
- ゲームは、プラットフォームアカウントをメインアカウントにリンクすることを提案するメッセージを表示します。
- プレーヤーがアクションを確認した場合:
- それらはサイドアプリケーション(ゲームのWebサイトやモバイルアプリなど)にリダイレクトされ、そこでメインアカウントを認証または作成できます。
- アプリでの認証に成功すると、プレーヤーはアカウントをリンクするための英数字コードを受け取ります。
- プレーヤーはゲームのコンソールバージョンに戻り、コードを入力します。
- メインアカウントとプラットフォームアカウントのリンクとゲームコンソールは確認メッセージが表示されます。
- プラットフォーム上のプレーヤーインベントリは、メインアカウントにリンクされたインベントリと同期されます。
使用に適した方
ゲーム開発者がゲームのマルチプラットフォームリリースを計画して、プレイヤーがあらゆるプラットフォームで購入や報酬にアクセスできるようにすることで、忠実なプレイヤー基盤を確立したいと考えています。
入手方法
クロスプラットフォームインベントリを接続するには:
- プレーヤーインベントリへ接続する。サーバーメソッドを操作するための基本的なアクセス認証と、クライアントメソッドを操作するためのOAuth 2.0プロトコルに基づくエクソーラログイン認証を実装します。ログインAPIメソッドにアクセスしてアカウントリンクメソッドを実装するには、OAuth 2.0プロトコルベースの認証も必要です。
- 以下を含むアカウントリンクUIを実装します:
- ゲームサーバーベースの認証とインベントリ管理
- ゲームクライアントベースの認証とインベントリ管理
- アカウントのリンク方法
アカウントリンクUI
アカウントリンクUIは、次の機能を提供する必要があります:
- プラットフォームアカウントをメインアカウントにリンクするメッセージを表示する機能
- アカウントのリンクに同意または拒否する機能
- ユーザーがリンクすることに同意した場合、アカウントをリンクするためのコードを送信する機能
- アカウントのリンクに使用されるモバイルまたはWebアプリケーションのURLを表示する機能
メインアカウントでユーザーを認証するメカニズムは次のとおりです:
- ログインウィジェットをアプリと統合します。
- ユーザーがウィジェットを介して認証すると、JWTがアプリに渡されます。JWTをアプリからメソッドに渡して、リンクコードを取得し、アプリのUIにコードを表示する機能を実装します。
- ゲームサーバー側のJWTを介して認証を実装します。
- ユーザーがゲームのコンソールバージョンを入力し、アカウントをリンクするためのコードを送信するときに、実装はトークン、
user_id
をコンソールプラットフォームに渡し、およびメインアカウントにリンクするためのメソッドにプラットフォームIDを渡します。
ゲームサーバーでの認証
ゲームサーバー上のプレーヤーインベントリを管理するためのログインAPIメソッドにアクセスするには、OAuth 2.0認証を設定し、サーバーアクセストークンを取得する必要があります。
リクエスト:
- php
<?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);
レスポンス:
- php
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"token_type":"bearer",
"expires_in":3600,
"scope": ""
}
ゲームサーバーでのプレーヤーインベントリの管理
インベントリ管理メソッドには、次のサーバーメソッドが含まれます:
これらのメソッドには、プラットフォーム上のユーザーのuser_id
とプラットフォームIDを渡す必要があります。
ゲームクライアントでの認証
Auth by custom ID APIメソッドを実装して、ゲームクライアントのプレーヤーインベントリを管理します。リクエストで次のパラメータを渡します:
server_custom_id
-ゲーム内固有のユーザー識別子social_profile.user_id
-プラットフォーム上固有のユーザー識別子
リクエスト:
- php
<?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);
レスポンス:
- php
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
ゲームクライアントでのプレーヤーインベントリの管理
インベントリ管理メソッドには、次のクライアントメソッドが含まれます:
コンソールプラットフォームでプレーヤーインベントリを管理するには:
- コンソールプラットフォームの規制に従って、コンソール発行プラットフォームにプレミアム通貨の残高を保存するために、クライアントメソッドへのプラットフォームIDの受け渡しを実装します。
- コンソールクライアントでユーザーのインベントリを管理するには、ゲームサーバーに次の手順を実装します:
- ゲームは、ユーザーのトークン化のためにサーバーアクセストークンを受け取ります。
- ゲームは、プラットフォーム上のユーザーの
user_id
とプラットフォームIDによってJWTを受け取ります。 - ゲームは、指定されたクライアントメソッドにJWTを渡します。
アカウントリンクメソッド
リンクコードを取得する
Create code for linking accounts APIメソッドを実装して、リンクコードを取得してユーザーに渡します。
リクエスト:
- js
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);
レスポンス:
- js
{
"code": "123456"
}
メインアカウントへのリンク
Link accounts by code APIメソッドを実装する場所:
code
-リンクコードpublisher_project_id
-アドミンページからのプロジェクトIDuser_id
-プラットフォーム上のユーザー識別子
メソッドを呼び出す前に、次の手順を完了していることを確認してください:
- アカウントリンクコードを表示するためのUIと、受信したコードを入力するためのフォームを実装しました。
- サーバーアクセストークンを取得するためのメソッドを実装しました。
- リンクコードを取得するためのメソッドを実装しました。
リクエスト:
- php
<?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);
レスポンス:
- php
204 OK
プラットフォームリスト
プラットホーム | プラットフォームID | コメント |
---|---|---|
PlayStationネットワーク | playstation_network | - |
XBox Live | xbox_live | - |
PCスタンドアロン | pc_standalone | - |
Nintendo eショップ | nintendo_shop | - |
Google Play | google_play | - |
Apple Store | app_store_ios | - |
Androidスタンドアロン | android_standalone | ゲームはストア以外で個別に公開されます。 |
IOSスタンドアロン | ios_standalone | ゲームはストア以外で個別に公開されます。 |
Androidその他 | android_other | ゲームはPlayMarketの代替ストアで公開されます。 |
IOSその他 | ios_other | ゲームはAppStoreの代替ストアで公開されます。 |
PCその他 | pc_other | - |
エクソーラ | xsolla | - |
この記事は役に立ちましたか?
このページを評価する
答えたくない
ご意見ありがとうございました!
誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。