クロスプラットフォームアカウント

どのように動作するか

用語集

パブリッシャーアカウントで次のログインプロジェクトタイプにアクセスできます:

  1. 標準ログインプロジェクトはメインアカウントを保存するために使用されるログインプロジェクトです。
  2. シャドウログインプロジェクトはプラットフォームアカウントを格納するために使用されるログインプロジェクトです。

メインアカウントは標準のログインプロジェクトで作成され、プラットフォームアカウントにリンクされているアカウントタイプです。メインアカウントは、異なるプラットフォームでプレーヤーを識別するために使用されます。

プラットフォームアカウントはシャドウログインプロジェクトで作成され、明確な公開プラットフォームに接続されているアカウントタイプです。プラットフォームアカウントを別のプラットフォームアカウントにリンクすることはできません。また、メインアカウントからアカウントのリンクを解除することもできません。

パブリッシングプラットフォームは、ゲーム配信に使用されるゲームプラットフォーム(Steam、PlayStation、Xboxなど)です。

クロスプラットフォームアカウントは、メインアカウントとプラットフォームアカウントがリンクしているアカウントです。

明確なプラットフォームでゲームを行うすべてのユーザーアカウントは、シャドウログインプロジェクトのプラットフォームアカウントに対応している必要があります。たとえば、ユーザーがXboxおよびPlayStationプラットフォームで所有するゲームのアカウントを持っている場合、シャドウログインプロジェクトプラットフォームアカウントは、対応するXboxおよびPlayStationプラットフォームアカウントにリンクする必要があります。

クロスプラットフォームアカウントを使用する

クロスプラットフォームアカウントでは、次のことができます:

メインアカウントとプラットフォームアカウントがリンクされている場合:

  1. ユーザーはプラットフォームで認証します。
  2. エクソラログインサーバーはメインアカウントトークンをユーザーに送信します。
  3. エクソラログインサーバーはメインアカウントユーザーを認証します。

クロスプラットフォームアカウントを使用する場合、トークン内のユーザーIDはメインアカウントIDと同じになります。JWT>subクレームでユーザーIDが見つかります。

アカウントリンキングフロー

ユーザーがメインアカウントを持っている場合、プラットフォームでの認証中にプラットフォームアカウントをリンクできます。フローは以下のとおりです:

  1. プレーヤーは初めてゲームコンソールプラットフォームでゲームに参加します。
  2. ゲームUIには、プラットフォームアカウントをメインアカウントにリンクすることを提案するメッセージが表示されます。
  3. ユーザーがアプリケーションを起動し、メインアカウントを入力します。
  4. アプリケーションは、Create code for linking accountsリクエストをエクソラログインサーバーに送信します。
  5. アプリケーションUIは、アカウントをリンクするためのコードをユーザーに表示します。
  6. ユーザーはゲームのコンソールバージョンに戻り、コードを入力します。
  7. ゲームサーバーは、Link accounts by codeリクエストをエクソラログインサーバーに送信します。
  8. ゲームコンソールに確認メッセージが表示されます。

使用に適した方

ログインを統合済みで、公開プラットフォームアカウントを持っているパートナー。

入手方法

クロスプラットフォームアカウントを統合するには、パブリッシャーアカウントの次のパラメーターが必要です:

  • main_project_id-UUID形式の標準ログインプロジェクトのID。例えば:f6c5011a-715e-4e5e-b7b1-a4812d85b8c8
  • shadow_project_id-UUID形式のシャドウログインプロジェクトのID。このプロジェクトはシャドウログインプロジェクトとして使用されます。シャドウログインプロジェクトを作成し、ログインプロジェクト設定でそのプロジェクトにpublisher_project_idを指定します。shadow_project_idは作成されたプロジェクトのID。
  • publisher_project_id-プロジェクトのID。パラメータは、プロジェクト設定> 一般設定> プロジェクトIDに表示されます。

shadow_project_idを送信し、publisher_project_idパラメータをアカウントマネージャーに送信して、次のOAuth 2.0クライアントパラメータを取得します:

  • client_id-OAuth 2.0クライアントID
  • client_secret-OAuth 2.0クライアント秘密鍵
サーバートークンを取得するため、上記のパラメーターを使用します。

クロスプラットフォームアカウントを統合するアルゴリズムは次のとおりです:

  1. 次のユーザー認証を実装します:
    1. メインアカウント
    2. プラットフォームアカウント
  2. アカウントをリンクします:
    1. リンク用のコードを取得する
    2. アカウントをリンクする

メインアカウントでのユーザーを認証する

メインアカウントはmain_project_idが指定されたログインプロジェクトに作成されます。登録と認証には、ログインウィジェットLogin APIの両方を使用できます。

プラットフォームアカウントでのユーザーを認証する

プラットフォーム経由のユーザー登録と認証については、メソッドを選択し、指示に従ってください。これらのメソッドを組み合わせることができます。たとえば、Xboxプラットフォームでサイレント認証を使用し、別のプラットフォームでcustom IDによる認証を使用できます。

Custom ID経由の認証

プラットフォームアカウントを作成するには、ゲームサーバーでAuth by custom IDコールを使用します。このコールに次のデータを渡します:

  • publisher_project_idまたはshadow_project_idパラメータ(それらが渡されない場合、エクソラログインサーバーはエラーを返します)
  • サーバートークン
  • social_profileパラメータのユーザープラットフォームアカウント情報

この認証コールを使用すると、異なるプラットフォームからユーザーの友達のリストを取得できなくなります。認証に使用できるプラットフォームのリストは制限されていません。

認証フロー:

  1. ユーザーがゲームを起動すると、ゲームクライアントは認証リクエストをゲームサーバーに送信します。
  2. ゲームサーバーは、既存のユーザーcustom IDを生成または使用します。
  3. ゲームサーバーは、Auth by custom IDリクエストをエクソラログインサーバーに送信し、プラットフォームとその上のユーザー識別子(パラメータplatformuser_id)を指定します。渡されたカスタムIDを持つユーザーが見つからない場合、新しいユーザーが作成されます。
  4. エクソラログインサーバーは、ゲームサーバーにトークンを送信します。

リクエストの例:

Copy
Full screen
Small screen
POST /api/users/login/server_custom_id?publisher_project_id=<publisher_project_id> HTTP/1.1
Host: login.xsolla.com
X-Server-Authorization: <server_token>
Content-Type: application/json

{
  "server_custom_id": "secret_value",
  "social_profile": {
    "platform": "xbox",
    "user_id": "123"
  }
}

応答の例:

Copy
Full screen
Small screen
HTTP/1.1 200 OK
Content-Type: application/json

{
  "token": "<platform_user_token>"
}

サイレント認証

サイレント認証説明に従って設定してください。ゲームサーバーでサイレント認証コールを使用して、プラットフォームアカウントを作成します。

サイレント認証コールを使用すると、異なるプラットフォームからユーザーの友達のリストを取得できます。サイレント認証に使用できるプラットフォームのリストはレシピにあります。

リンキングコードを取得する

リンキングコードを取得するには:

  1. Create code for linking accountsコールを利用する。メインアカウントで認証中に受け取ったユーザートークンをこのコールに渡します。
  2. 受け取ったコードをユーザーに表示します。

リクエストの例:

Copy
Full screen
Small screen
POST /api/users/account/code HTTP/1.1
Host: login.xsolla.com
Authorization: Bearer <main_user_token>

応答の例:

Copy
Full screen
Small screen
HTTP/1.1 200 OK
Content-Type: application/json

{
  "code": "123456"
}

アカウントをリンクする

Link accounts by codeコールを使用して、プラットフォームアカウントをメインアカウントにリンクします。codeパラメータに、ユーザーがコンソールプラットフォームで入力したリンキングコード値をこのコールに渡します。

リクエストの例:

Copy
Full screen
Small screen
POST /api/users/account/link HTTP/1.1
Host: login.xsolla.com
X-Server-Authorization: <server_token>
Content-Type: application/json

{
  "code": "123456",
  "platform": "xbox",
  "user_id": "123",
  "publisher_project_id": 44056
}

応答の例:

Copy
Full screen
Small screen
HTTP/1.1 204 No Content