サブスクリプション

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


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

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の通知 を参照してください。


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

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

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

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


販売物審査ファイルの記入とストアへの商品登録はどちらを先に行う?

どちらを先に行っても問題ありません。

ただし、一部項目についてはストアに登録する値と同じ値を設定する必要があります。

詳細は 商品構成 の「ストアと同じ値を設定する必要がある項目」を参照してください。


ストアの通知とXGサブスクリプション通知の関係は?

ストアからの通知の内容をもとに、XGサブスクリプション通知を生成してゲームサーバーへ送信します。

ストアの通知とXGサブスクリプション通知のイベント・サブスクリプション状態の対応は以下を参照してください。


サブスクリプションの継続回数はどうカウントする?

XGサブスクリプション通知の transactionId の発行件数をユーザー単位でカウントしてください。

途中で有効期限切れや返金を挟んだ場合のカウント方法(引き継ぐ、リセットする等)はタイトルの仕様に応じて判断してください。

詳細は XGサブスクリプション通知「継続回数のカウント」 を参照してください。


あるストアで購入したサブスクリプションの利用権は他のストアでも利用できますか?

サブスクリプショングループIDによりストア横断で同一商品として管理されるため、ストアをまたいで利用権を付与・継続が可能です。

同一サブスクリプションの利用権をどのように扱うかはタイトルの仕様に応じて判断してください。

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


App Storeで購入済みのユーザーがGoogle Play版の「購入の復元」を実行するとどうなりますか?

Google Playの復元では購入時と同じPurchaseTokenが返されるため、サブスクリプション購入検証APIで処理済み( processed )となり、そのまま終了します。

ただし、処理済みになった時のXGユーザーと異なるXGユーザーで実行した場合は、 subscription_transaction_id_used_by_other_user (HTTP 400)エラーになります。

詳細は 復元機能Google Play を参照してください。


XGサブスクリプション通知の返金(revoked)は通常商品の返金でも届きますか?

いいえ。XGサブスクリプション通知はサブスクリプション専用の通知です。 ストアからの通知の受け取りは行っていますが、通常商品(消費型・非消費型)に関しては送信されません。

詳細は XGサブスクリプション通知の対象 を参照してください。