サブスクリプション

サブスクリプション機能に関するよくある質問と回答です。


どのストアのどのサービスに対応していますか?

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

ストア

対応サービス

App Store

サブスクリプション

Google Play

定期購入

DMM GAMES

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

詳細は 概要 を参照してください。


サブスクリプションの購入方法は?

サブスクリプションの購入処理は、基本的な課金アイテム購入と同様の流れです。

ストアでサブスクリプション商品を購入後、ゲームサーバーでサブスクリプション購入検証APIと購入APIを呼び出し、XGサブスクリプション通知を受信して利用権を付与します。

詳細は サブスクリプションシーケンス を参照してください。


サブスクリプションの更新処理はどうすればいい?

サブスクリプションの状態変更(継続、キャンセル、有効期限切れ等)は、XGサーバーからゲームサーバーへ通知されます(XGサブスクリプション通知)。

ストアごとの処理方法が異なります。App Storeは継続時に新しいtransactionIdが発行されるため、ゲーム端末の未処理レシートもしくはApp Storeサーバー通知で処理します。Google PlayとDMM GAMESは、XGがサーバー通知を受信するか、バッチ処理で更新を検知して処理します。

詳細は サブスクリプションシーケンス を参照してください。


XGサブスクリプション通知の処理方法は?

XGサブスクリプション通知は、XGサーバーからゲームサーバーに送信されるサブスクリプション状態の変更通知(購入、継続、キャンセル、返金など)です。

通知受信時の処理フローは以下の通りです。

  1. 署名検証: signedTransaction を公開鍵で検証・デコード

  2. 重複チェック: transactionId で処理済みかどうかを確認

  3. 利用権処理: itemAction に応じて利用権を付与・回収(または処理なし)

  4. サブスクリプション情報の保存: subscriptionStatustransactionId などを保存

  5. レスポンス返却: 成功時は subscriptionTag を返却

XGサブスクリプション通知の処理方法は、バッチ処理(基本となる処理方法)とゲーム端末からの処理(ゲームプレイ時の処理方法)の2種類があります。

詳細は XGサブスクリプション通知 および サブスクリプションシーケンス を参照してください。


サブスクリプションの有効・無効はどう判断する?

XGサブスクリプション通知に含まれる subscriptionStatus でサービス利用可否を判断してください。

  • 利用可: active / canceled / grace_period

  • 利用不可: on_hold / expired / paused / revoked

サービス利用不可の場合は、利用権を無効として扱ってください(コンテンツのロック等)。

各状態の詳細は 用語集 の「サブスクリプション状態」、イベントとの対応は XGサブスクリプション通知サブスクリプション状態変更イベントと利用権処理 を参照してください。


利用権の付与・回収・無効化の違いは?

  • 付与(grant): XGサブスクリプション通知に含まれる itemActiongrant の場合、アイテム付与やコンテンツのアンロック等を行います

  • 回収(revoke): XGサブスクリプション通知に含まれる itemActionrevoke の場合、返金等により付与済みのアイテムを回収します

  • 無効化: サブスクリプション状態がサービス利用不可の場合、サービス利用を制限します(コンテンツのロック等)。アイテム回収は発生しません

詳細は XGサブスクリプション通知利用権の付与・回収・無効化 を参照してください。


XGサブスクリプション通知のテスト通知と通常の通知の違いは?

XG Developer Siteからテスト通知を送信した場合、以下の点が通常の通知と異なります。

  • リクエストボディに testNotification フィールドが含まれます

  • signedTransaction のJWSペイロードには xgProjectIdxgApplicationIdenvironment のみが含まれます。 eventtransactionId などの項目は含まれません

詳細は XGサブスクリプション通知 の「テスト通知時のJWSペイロード」を参照してください。


XGサブスクリプション通知が重複して届いた場合はどう処理する?

XGサブスクリプション通知は、ネットワークエラーやタイムアウトなどの理由により同じ通知を複数回送信する可能性があります。

ゲームサーバーは、署名検証後に transactionId で通知の重複を判定してください。同じ transactionId の通知を処理済みの場合は、処理をスキップして成功レスポンスを返却してください。

詳細は XGサブスクリプション通知 の「通知の重複処理防止」を参照してください。


ストアからの通知の順序が前後した場合はどうなる?

ストアからXGへの通知の届く順序が前後した場合、XGサブスクリプション通知の itemAction が通常時と異なる値になることがあります。

storeNotificationStatusdelayed の場合、すでに処理済みのものより前のイベントの通知です。 itemAction に従って処理してください。

詳細は 利用権の操作とストアからの通知の遅延 を参照してください。


XGサブスクリプション通知のレスポンスで失敗を返した場合はどうなる?

HTTPステータスコード 4xx または 5xx を返却した場合、XGはリトライします。

成功時はHTTPステータスコード 200 で subscriptionTag を含むJSONを返却してください。

詳細は XGサブスクリプション通知 の「レスポンス仕様」を参照してください。


ゲーム内通貨の発行数を切り替えるには?

サブスクリプションタグで切り替えます。

XGサブスクリプション通知のレスポンスで返すサブスクリプションタグを条件に応じて切り替えてください。

活用例:

  • 初回購入: initial タグで初回特典のゲーム内通貨を発行

  • 通常継続: repeat タグで通常のゲーム内通貨を発行

  • 3ヶ月ごとのボーナス: 3month_bonus タグでボーナスを付与

継続回数の管理はゲームサーバー側で行ってください。

利用権を付与する通知ではサブスクリプションタグの指定は必須です。ゲーム内通貨を発行しない場合でも、発行しない設定のサブスクリプションタグを指定してください。

詳細は 用語集 の「サブスクリプションタグ」および XGサブスクリプション通知 の「サブスクリプションタグ」を参照してください。


有効期限で有効・無効を判断してもいい?

いいえ。有効期限( subscriptionExpiryAt )ではなく subscriptionStatus で判断してください。

有効期限が過ぎていても、サブスクリプション状態が期限切れ(expired)になるまでは有効のままです。有効期限はゲーム端末での表示にのみ使用してください。

詳細は 用語集 の「有効期限」を参照してください。


Google Play のサブスクリプションでは Pub/Sub の用意が必要ですか?

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

詳細は Google Playの通知 を参照してください。


リカバリー処理はいつ必要?

サブスクリプションの処理が中断した場合、リカバリー処理が必要です。

ゲーム端末表示フラグが「レコード無し」または「未表示」の場合はリカバリー処理が必要です。「表示済み」の場合は不要です。

詳細は サブスクリプションシーケンス のリカバリーシーケンスを参照してください。