Digital Distribution Hub

概要

Digital Distribution Hub - ゲーム開発者と、ゲーム、仮想アイテム及び仮想通貨配信のための独自のプラットフォームやエコシステムを持つ複数の配信パートナーとをつなぐソリューションです。

配信者パートナー — ゲームとゲーム内アイテムを配信し、独自のストアフロントと請求を行うことができるデジタルプラットフォームまたはエコシステム。エクソラの販売パートナーの例:

  • 複数のサービスをバンドルするスーパーアプリ
  • バンキングアプリケーション
  • 通信&インターネットサービスプロバイダー
  • キャッシュキオスク
  • キャッシュバックおよびリワードプログラムプロバイダー
  • ECマーケットプレイス

ゲーム開発者側のメリット:

  • 急成長している配信パートナーと直結し、ゲームの視聴者を拡大します。
  • ユニークなユーザー層を持つ新たな流通チャネルにゲームを追加することで、収益を拡大します。
  • 広告やバナーを通じて、第三者のプラットフォームにおけるオーガニックな発見力を高めます。

配信パートナー側のメリット:

  • ゲームコンテンツへのアクセス拡大によるユーザーのロイヤリティ向上します。ユーザーは、アプリやサービスから直接ゲームキー、仮想アイテム、仮想通貨及びバンドルを購入することができるようになります。
  • ゲーム業界の人気の高まりを通じて、現在のユーザーを維持し、新しいユーザーを引き付けています。
  • ゲーム産業市場の最大手企業のゲームキー、仮想アイテム、仮想通貨の販売手数料による収入を増加します。

どのように動作するか

ゲームキー購入時のユーザーフロー

仮想アイテムや仮想通貨を購入する際のユーザーフロー

統合フロー

  1. ゲーム開発者はパブリッシャーアカウントでプロジェクトを作成し、ゲームキー、仮想アイテム、仮想通貨、バンドルなどをアップロードします。
  2. 配信パートナーが以下のユーザーデータをリクエストします:
    • キーの送信先となるユーザーのメールアドレス;
    • アイテムが追加されるユーザーのゲーム内ID。
  3. 配信パートナーのインターフェースのユーザーは、キーを受け取るためのメールアドレスまたはアイテムを受け取るためのユーザーIDを入力します。
  4. 配信パートナーがユーザートークンを作成するを呼び出し、パラメータとしてメールアドレスまたはユーザーIDを渡します。
  5. エクソラは、ユーザーがゲームに存在するかどうか、ゲーム開発者がウェブフックを有効にしているかどうかを確認します。ゲームキー販売用のウェブフックの搭載は任意です。ただし、仮想アイテムや仮想通貨を販売する場合は必要です。
  6. エクソラはユーザーデータでトークンを作成し、配信パートナーにトークンを送信します。
  7. 配信パートナーは、ゲームカタログまたはゲーム内アイテムカタログを要求します。
  8. エクソラは、リクエストされたカタログを応答で返します。
  9. 配信パートナーはカタログを受け取り、ユーザーに表示します。
  10. ユーザーがゲームを購入します。ディストリビューターパートナーがカートを作成します。
  11. 配信パートナーは、注文を作成するためにユーザーのカートを送信します。
  12. エクソラは、注文IDと、割引や税金を含むカートの価格を返します。
  13. 配信パートナーは、カート内のゲームの総コストをユーザーに表示します。
  14. ユーザーが支払いを続ける場合、配信パートナーはユーザーの資金を引き落とし、決済状態ページを表示します。
  15. 配信パートナーは、注文の支払いが完了したことをエクソラに通知し、支払い情報を送信します。
  16. エクソラはゲーム開発者に購入を通知します。
  17. ゲームを購入したユーザーは、購入の詳細が記載されたメールを受け取り、ゲームキーをアクティブ化できます。ユーザーが仮想アイテムまたは仮想通貨を購入した場合、インベントリに追加されます。

ゲーム開発者側での統合

Digital Distribution Hubの接続方法

配信チャネルを通じてゲームを宣伝するには:

  1. パブリッシャーアカウントストアを接続して以下のことをダウンロードします:
  2. ウェブフックをセットアップします
  3. プロジェクトのDigital Distribution Hubをアクティブ化するには、アカウントマネージャーに連絡するか、am@xsolla.comにメールを送信てください。

お知らせ
まだエクソラのパートナーでない方で、Digital Distribution Hubとの連携にご興味のある方は、business@xsolla.comにメールをお送りください。

ウェブフックをセットアップする方法

ウェブフックのセットアップは必須です:

ウェブフックを有効にするには:

  1. パブリッシャーアカウントであなたのプロジェクトを開きます。
  2. サイドメニューでプロジェクト設定をクリックしてウェブフックに移動します。
  3. ウェブフックトグルをオンにします。
  4. ウェブフックURLを指定します。
  5. プロジェクトのウェブフックに署名するための秘密鍵は、デフォルトで生成されます。新しい秘密鍵を生成する場合は、更新アイコンをクリックします。
  6. 設定を保存するをクリックします。

お知らせ
仮想アイテムや仮想通貨の配布には、接続用ウェブフックを使用する必要があります。ウェブフックがないと、ゲーム内アイテムをユーザーのインベントリに追加することができません。

ユーザー検証

エクソラはユーザー検証ウェブフックを送信し、ユーザーがゲーム内に存在することを検証します。ユーザー検証では、以下のことが可能です:

  • 応答にユーザー属性を渡すと、そのユーザー用にパーソナライズされたカタログを表示する;
  • 購入後、ユーザーのインベントリにアイテムを追加する。

ウェブフックの受信を確認するには、サーバーは以下の情報を返す必要があります:

  • ゲーム内にユーザーが存在する場合、メッセージボディのないHTTPコード204が表示されます;
  • 指定されたユーザーが見つからないか、無効な署名が渡された場合、問題を説明するHTTPコード400が表示されます。

ウェブフックの全リストと仕組みは、例を含めてAPIリファレンスで詳しく説明されています。

リクエスト本文のスキーマ:

Copy
Full screen
Small screen
    {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "user_attributes": {
        "type": "object",
        "required": false,
        "minProperties": 1,
        "maxProperties": 100,
        "patternProperties": {
          "^[\\w-_.]{1,255}$": {
            "oneOf": [
              {
                "type": "integer"
              },
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 255
                },
                "minItems": 1,
                "maxItems": 1000
              }
            ]
          }
        },
        "additionalProperties": false
      }
    }
    }

    応答の例:

    Copy
    Full screen
    Small screen
    {
      "user_attributes": {
        "age": 18,
        "level": 1,
        "game": "WoW",
        "is_baned": false,
        "registration_date": "2022-01-01"
      }
    }

    トランザクションのID連携

    external ID(システムのトランザクションID)を使用していて、それをエクソラ側のトランザクションIDに関連付けたい場合は、以下のウェブフック処理を実装します:

    Copy
    Full screen
    Small screen
      {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "notification_type": {
            "type": "string"
          },
          "order_id": {
            "type": "integer"
          },
          "project_id": {
            "type": "integer"
          },
          "user": {
            "type": "object",
            "properties": {
              "external_id": {
                "type": "string"
              },
              "email": {
                "type": ["string", "null"]
              }
            }
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "item_id": {
                  "type": "integer"
                },
                "sku":  {
                  "type": "string"
                },
                "quantity": {
                  "type": "integer"
                },
                "type": {
                  "type": "string"
                }
              }
            }
          }
        }
      }

      リクエストの例:

      Copy
      Full screen
      Small screen
      {
        "notification_type": "create_external_transaction",
        "order_id": 1,
        "project_id": 51336,
        "user": {
          "external_id": "user_id",
          "email": null
        },
        "items": [
          {
            "item_id": 101,
            "sku": "mithril_dagger",
            "quantity": 2,
            "type": "virtual_good"
          }
        ]
      }

      予期された応答:

      Copy
      Full screen
      Small screen
        {
          "id": "validation_transaction_info_response.json",
          "$schema": "http://json-schema.org/draft-07/schema#",
          "description": "DDH Project Transaction Info Response",
          "type": "object",
          "additionalProperties": true,
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            }
          },
          "required": [
            "id"
          ]
        }

        応答の例:

        Copy
        Full screen
        Small screen
        {
            "id":"123"
        }

        トランザクションIDを連携するためのウェブフックパラメータのリスト:

        パラメータ種類説明文
        notification_type
        string通知の種類。
        order_id
        integer注文ID。
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。
        user.external_id
        stringゲーム開発者側のユーザーID。
        items
        stringユーザーが購入したアイテムのリスト。
        items.sku
        arrayアイテムの一意のID。game_keyタイプのアイテムは、sku_drmフォーマットの値を使用します。
        items.type
        arrayアイテムの種類。以下の値を持つことができます:virtual_goodvirtual_currencygame_keyphysical_good
        items.quantity
        integerアイテムの数量。

        購入通知

        ユーザーが購入代金を支払った後、以下のことを取得します:

        配信パートナー側での統合

        統合マネージャー(psbusiness@xsolla.com)までメールでお問い合わせいただき、Digital Distribution Hub APIと連携するために必要なパラメータを取得します:

        お知らせ
        配信パートナーは、Digital Distribution Hub APIを使用するためにパブリッシャーアカウントでアカウントを作成する必要はありません。ゲーム開発者がゲームキーとゲーム内アイテムを販売するためのAPIメソッドを使用するには、パブリッシャーアカウントでのアカウント作成が必要です。

        アプリやサービスでゲームやゲーム内アイテムを配信する場合は、以下のゲーム購入ロジックを実装します:

        1. ゲーム内でユーザーのメールアドレスやユーザーIDを入力するためのフォームを表示します。
          このメールアドレスは、ゲームキーやゲームキーバンドルなどを販売するプロジェクトで使用されます。この場合、ユーザーがDRMを選択できるようにする機能もインターフェースに実装する必要があります。
          ユーザーIDは、仮想アイテム、仮想通貨、アイテムや通貨とのバンドル販売を行うプロジェクトで使用されます。この場合、ゲーム登録時に受け取ったIDを入力するためのヒントも表示する必要があります。例:

        1. 受信したメールアドレスまたはユーザーIDを渡して、ユーザーがゲーム内に存在するかどうかを確認し、認証トークンを受信します。ユーザートークンを作成するメソッドを使用します。リクエストにパラメータを渡します:

        パラメータ種類説明文
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。
        user.email
        stringユーザーのメールアドレス。
        user.id
        string or nullゲーム内で一意のユーザー識別子。

        1. 応答でユーザーデータを含む認証トークンが返されます。

        1. インポート:

        1. リクエストには、手順2で受け取ったトークンと、以下のパラメータを渡します:

        パラメータ種類説明文
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。

        1. ゲームとゲーム内アイテムのカタログをストアフロントに表示します。インターフェースでは、選択する機能を実装しています:
          • ゲームキーの数量;
          • ゲーム内アイテムの数量;
          • 固定金額の仮想通貨または仮想通貨パッケージの数量;
          • バンドルの数量。

        1. カートを使用する場合は、ユーザーのカートでアイテムの数量を指定することができます。カートを使用しない場合、アイテムの数量の選択はカタログに実装することができます。

        1. カート内のアイテム数量を指定する例:

        1. カタログ内のアイテム数量を指定する例:

        1. カートを使用しない場合は、ステップ6に進み、指定されたアイテムで注文を作成するメソッドを使用します。

        1. カートにアイテムを入れるには、カートにアイテムを入れるメソッドを使用します。

        1. ユーザーは、1つの注文でアイテムを追加および削除したり、数量を変更したりできます。以下のメソッドを使ってカートを更新することができます:

        1. この場合、カートを更新した後に現在のユーザーのカートを取得するを使用します。

        1. カートの入力および更新方法のリクエストで、次のパラメータを渡します:

        パラメータ種類説明文
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。
        items.sku
        stringアイテムの一意のID。game_keyタイプのアイテムは、sku_drmフォーマットの値を使用します。
        items.quantity
        integerアイテムの数量。

        1. カートにアイテムを入れるまたは現在のユーザーのカートを取得するを呼び出した後、レスポンスは選択された商品に関する最新の情報(割引前と割引後の価格、ボーナス商品)を返します。

        1. 注文を作成し、カート内のアイテムの代金を支払うには、現在のカートの全アイテムを含む注文を作成するメソッドを使用します。リクエストには、以下のパラメータを渡します:

        パラメータ種類説明文
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。
        geotype
        numberエクソラ側の配信者パートナーID。
        currency
        string注文の通貨。仮想通貨はSKU、現実の通貨は3文字のISO 4217コードを使用します。

        1. 応答には、注文IDと税込みカート価格が返されます。

        お知らせ
        指定されたアイテムで注文を作成するメソッドを使用すると、カートを作成せずに注文を作成することができます。この場合、ユーザーは1種類の商品しか購入できません。

        1. ユーザーにカートの合計金額を表示します。
        2. プラットフォームからユーザーの資金を引き落とします。ユーザーに決済状態を表示します。
        3. 支払い通知を送信し、リクエストに以下のパラメータを渡します:

        パラメータ種類説明文
        project_id
        integerゲームキー、ゲームキーバンドル、ゲーム内アイテム、ゲーム内アイテムバンドルがロードされるプロジェクトのID。
        payment.amount
        integer支払額。
        order_id
        integer注文ID。
        ps_transaction_id
        string配信パートナー側のトランザクションID。
        お知らせ
        支払いが返金された、または支払いが完了しなかった場合、支払い取り消しに関する通知を送信します。
        この記事は役に立ちましたか?
        ありがとうございます!
        改善できることはありますか? メッセージ
        申し訳ありません
        この記事が参考にならなかった理由を説明してください。 メッセージ
        ご意見ありがとうございました!
        あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
        このページを評価する
        このページを評価する
        改善できることはありますか?

        答えたくない

        ご意見ありがとうございました!
        最終更新日: 2022年11月9日

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