概要

XGサブスクリプションの特徴

XGのサブスクリプション機能を利用することで、ゲームサーバーの実装を大幅に簡素化できます。

各ストアの対応サービス

XGサブスクリプションは、以下のストアのサービスに対応しています。

ストア

対応サービス

App Store

サブスクリプション

Google Play

定期購入

DMM GAMES

定期購入(月額決済サービスには非対応)

各ストアの仕様差分への対応

各ストア(App Store / Google Play / DMM GAMES)のサーバー通知形式やAPIの違いは、すべてXG側で処理します。 ゲームサーバーはストアごとの仕様を意識する必要がありません。 詳細は 各ストアの仕様差分への対応 を参照してください。

実装ガイド

サブスクリプション機能を実装するための手順を説明します。

1. XG Developer Siteで商品マスタを登録

各ストアに登録した商品情報をXG商品マスタに登録します。

2. ゲームサーバーからXG APIを呼び出す処理を実装

購入検証API・購入APIなど、ゲームサーバーからXGへのAPI呼び出しを実装します。 詳細は サブスクリプション購入シーケンス を参照してください。

3. XG Developer Siteで通知先エンドポイントを設定

XGサブスクリプション通知を受信するゲームサーバーのエンドポイントを設定します。

4. 公開鍵をダウンロードしてゲームサーバーに配置

XG Developer Siteから公開鍵(PEM形式)をダウンロードし、ゲームサーバーに配置します。 この公開鍵はXGサブスクリプション通知の署名検証に使用します。

5. ゲームサーバーにXGサブスクリプション通知受信エンドポイントを実装

XGサブスクリプション通知を受信し、サブスクリプション状態の保存・利用権の付与/無効化を行うエンドポイントを実装します。 詳細は XGサブスクリプション通知 を参照してください。

6. 復元機能の実装

ゲームサーバーに復元処理を実装します。 詳細は サブスクリプションの復元 を参照してください。

7. サンドボックス環境で動作確認

XGサンドボックス環境を使用して、購入から継続・キャンセルまでの一連の動作を確認します。

ライフサイクル

サブスクリプションのライフサイクル全体を俯瞰するための簡易図です。 購入から継続、キャンセル、有効期限切れまでの一連の流れと、各フェーズでのサブスクリプション状態の遷移を示しています。

注釈

App Store / Google Playでは、継続・キャンセル・有効期限切れなどの状態変更がサーバー通知でXGに送信されます。 DMM GAMESはサーバー通知がないため、XGがバッチ処理でサブスクリプションの状態を取得し、継続・キャンセル・有効期限切れを判断します。

各フェーズの処理概要

購入

  • ユーザーがストアでサブスクリプションを購入

  • ゲーム端末がゲームサーバーへ購入処理をリクエスト

  • ゲームサーバーがXGへ購入検証API・購入APIをリクエスト

  • XGからゲームサーバーへXGサブスクリプション通知(event=purchase)を送信

  • ゲームサーバーがサブスクリプション状態を保存し、利用権を付与

  • XGがゲーム内通貨を発行

  • ゲーム端末へ購入完了を返却

詳細は サブスクリプション購入シーケンスXGサブスクリプション通知受信シーケンス を参照してください。

継続

  • ストアからXGへサーバー通知(DMM GAMESはXGがバッチ処理で状態を取得)

  • XGからゲームサーバーへXGサブスクリプション通知(event=renewal)を送信

  • ゲームサーバーが利用権を継続

  • XGがゲーム内通貨を発行

  • ゲーム起動時に継続完了を表示

詳細は サブスクリプション更新処理シーケンスXGサブスクリプション通知受信シーケンス を参照してください。

キャンセル

  • ユーザーがストアでキャンセル

  • ストアからXGへサーバー通知

  • XGからゲームサーバーへXGサブスクリプション通知(event=canceled)を送信

  • ゲームサーバーがサブスクリプション状態を保存

  • ゲーム起動時にキャンセル状態を表示

詳細は サブスクリプション更新処理シーケンスXGサブスクリプション通知受信シーケンス を参照してください。

有効期限切れ

  • ストアからXGへサーバー通知

  • XGからゲームサーバーへXGサブスクリプション通知(event=expired)を送信

  • ゲームサーバーが利用権を無効化

  • ゲーム起動時に期限切れを表示

詳細は サブスクリプション更新処理シーケンスXGサブスクリプション通知受信シーケンス を参照してください。

返金

  • ストアで返金・払い戻しが発生

  • ストアからXGへサーバー通知

  • XGからゲームサーバーへXGサブスクリプション通知(event=revoked)を送信

  • ゲームサーバーがサブスクリプション状態を保存し、利用権を無効化

  • ゲーム起動時に返金状態を表示

詳細は サブスクリプション更新処理シーケンスXGサブスクリプション通知受信シーケンス を参照してください。

その他のイベント

上記以外のイベント(復元、再開、猶予期間、保留中、停止など)の詳細については、サブスクリプション状態変更イベントと利用権処理 、および 用語集 の「サブスクリプション状態変更イベント」を参照してください。

ユーザーのサブスクリプション状態の管理

ゲームサーバーは、XGサブスクリプション通知を受信した際にサブスクリプション状態を保存・更新する必要があります。サービス利用可否の判定には、有効期限ではなくサブスクリプション状態を使用してください。

注釈

有効期限が過ぎていても、期限切れイベント(expired)を受信するまではサブスクリプション状態は有効のままになります。詳細は 用語集 の「有効期限」を参照してください。

サブスクリプション状態一覧

状態

説明

有効(active)

サービス利用可

キャンセル済み(canceled)

有効期限まで利用可

猶予期間(grace_period)

サービス利用可

保留中(on_hold)

サービス利用不可

期限切れ(expired)

サービス利用不可

停止(paused)

サービス利用不可

返金済み(revoked)

サービス利用不可

各状態の詳細については 用語集 を参照してください。

シーケンス

各フェーズの詳細なシーケンス図と処理フローについては、サブスクリプションシーケンス を参照してください。

ゲーム内通貨発行のタイミング

XGサブスクリプションでは、以下のタイミングでゲーム内通貨を発行します。

イベント

ゲーム内通貨発行

備考

購入時

継続時

キャンセル時

-

返金・払い戻し時

-

ゲーム内通貨回収は未対応

再開時

-

できること/できないこと

内容

対応

備考

サブスクリプションの購入

ゲーム内通貨の発行に対応しています

サブスクリプションの継続

ゲーム内通貨の発行に対応しています

サブスクリプションの解約(キャンセル)

次回継続停止、有効期限まで利用できます

サブスクリプションの再開

一時的に無効になっていた状態からの復帰やキャンセルからの復帰

サブスクリプションの再購入

解約して有効期限が切れた後に再購入した場合、新規のゲームユーザー(XGユーザー)で再購入できます

サブスクリプションの返金・払い戻し

コンテンツロックは可能ですが、ゲーム内通貨回収は未対応です

初回購入時のオファー

App Store / Google Play / DMM GAMESで対応しています

月額

App Store / Google Play / DMM GAMESで対応しています

週額

App Store / Google Play / DMM GAMESで対応しています

ゲーム内通貨発行数の変更(タグ)

継続回数や初回購入時などで切り替え可能です

ストア通知受け取り

XGがストアからの通知を受け取り、ストアごとの差分を吸収します

サブスクリプション状態の管理

ストア通知によりサブスクリプション状態を管理します

XG Sandbox環境の複数XG AppID対応

購入時のPurchaseTokenやTransactionIdで判定します

XG本番環境でのテスト購入

App Store: 対応、Google Play: externalAccountIdで対応可能、DMM GAMES: 不可

サブスクリプションの復元

App Store / Google Playで対応します。DMM GAMESは非対応です。再インストール時はアカウント連携が必要です

返金・払い戻し時のゲーム内通貨の自動回収

×

マイナス回収などの仕様が固まり次第対応予定です

継続時のオファー

×

DMM GAMESでは初回購入時の特典(無料・割引)のみ対応しています

年額

×

DMM GAMESでは1週間・1ヶ月の期間のみ対応しています

各ストアの仕様差分への対応

各ストア(App Store / Google Play / DMM GAMES)のサーバー通知形式やAPIの違いは、すべてXG側で処理します。 ゲームサーバーはストアごとの仕様を意識する必要がありません。

ストア通知とXGサブスクリプション通知の対応

App StoreおよびGoogle Playでは、サブスクリプションの更新時にストアからサーバー通知が送信されます。
XGのサブスクリプション機能では、ストアからの通知をXGが受信して、ゲームサーバーへ通知します。

各ストアの通知とXGサブスクリプション通知の対応関係を以下の表に示します。

ストア通知とXGサブスクリプション通知の対応

XGサブスクリプション通知

Google Play通知

App Storeサーバー通知(notificationType / subtype)

purchase

SUBSCRIPTION_PURCHASED (4)

SUBSCRIBED / INITIAL_BUY

purchase

SUBSCRIBED / RESUBSCRIBE

renewal

SUBSCRIPTION_RENEWED (2)

DID_RENEW / (none)

recovered

SUBSCRIPTION_RECOVERED (1)

DID_RENEW / BILLING_RECOVERY

restart

SUBSCRIPTION_RESTARTED (7)

DID_CHANGE_RENEWAL_STATUS / AUTO_RENEW_ENABLED

canceled

SUBSCRIPTION_CANCELED (3)

DID_CHANGE_RENEWAL_STATUS / AUTO_RENEW_DISABLED

grace_period

SUBSCRIPTION_IN_GRACE_PERIOD (6)

DID_FAIL_TO_RENEW / (none)

grace_period

DID_FAIL_TO_RENEW / GRACE_PERIOD

on_hold

SUBSCRIPTION_ON_HOLD (5)

GRACE_PERIOD_EXPIRED / (none)

paused

SUBSCRIPTION_PAUSED (10)

expired

SUBSCRIPTION_EXPIRED (13)

EXPIRED / VOLUNTARY

expired

EXPIRED / BILLING_RETRY

expired

EXPIRED / PRICE_INCREASE

expired

EXPIRED / PRODUCT_NOT_FOR_SALE

revoked

SUBSCRIPTION_REVOKED (12)

REFUND / (none)

revoked

REVOKE / (none)

詳細な通知タイプとsubtypeの対応については、サブスクリプションシーケンス の「App Storeサーバー通知とサブスクリプション状態一覧」および「Google Play通知とサブスクリプション状態一覧」を参照してください。

App Storeの通知

App StoreからXGへの通知を受け取るには、App Store ConnectにXGのエンドポイントを設定する必要があります。 ゲームサーバーがXGからの転送を受け取る場合は、Pub/Subの用意が必要です。XGからの転送を受け取るかどうかは選択できます。

Google Playの通知

Google PlayからXGへの通知はPub/Subで行われますが、これはXG側で処理するため、ゲーム側でPub/Subを用意する必要はありません。 ゲームサーバーがXGからの転送を受け取る場合は、Pub/Subの用意が必要です。XGからの転送を受け取るかどうかは選択できます。

DMM GAMES状態とXGサブスクリプション通知の対応

DMM GAMESはサーバー通知がないため、XGがバッチ処理でサブスクリプションの状態を取得し、状態に基づいてXGサブスクリプション通知を送信します。

DMM GAMES状態とXGサブスクリプション通知の対応

XGサブスクリプション通知

サブスクリプション状態

DMM GAMES状態(subscriptionState)

purchase

active

SUBSCRIPTION_STATE_ACTIVE(購入時は購入APIを使用)

renewal

active

SUBSCRIPTION_STATE_ACTIVE(latestOrderIdが更新されている場合)

canceled

canceled

SUBSCRIPTION_STATE_CANCELED

expired

expired

SUBSCRIPTION_STATE_EXPIRED

詳細は サブスクリプションシーケンス の「DMM GAMES バッチ」を参照してください。

共通のXGサブスクリプション通知で完結

サブスクリプションの購入・継続・キャンセル・返金などのイベントは、すべてXGサブスクリプション通知として統一されたフォーマットでゲームサーバーに送信されます。 ゲームサーバーはXGサブスクリプション通知を受け取り、利用権の付与・無効化を行うだけで実装が完了します。