サブスクリプション更新処理シーケンス¶
App Store¶
サブスクリプション継続時に新しいtransactionIdが発行されるため、以下の2つの処理方法があります。
App Storeサーバー通知: XGがApp Storeサーバー通知(App Store Server Notifications)を受信して処理する
ゲーム端末の未処理レシート: ゲームサーバーがXGのAPIを呼び出して処理する
全体の流れ¶
App Storeサーバー通知¶
App Storeサーバー通知によるサブスクリプションの状態変更を処理するフローです。 XGがApp Storeサーバー通知を受信して処理します。
App Store 通知受信¶
XGがApp StoreからのServer Notificationsを受信し、通知を保存します。
注釈
XGがApp Storeサーバー通知を受信します。 通知に含まれるBundleIdからXG ProjectIDを特定し、通知を保存します。
App Store 通知処理(バッチ)¶
バッチ処理で定期的に未処理の通知を処理します。
ゲーム端末の未処理レシート・継続のみ¶
通常シーケンス¶
注釈
ゲーム端末に未処理のレシートがある場合、ゲーム端末からサブスクリプション更新APIリクエストが送信されます。 App Storeでサブスクリプションの購入の場合、以降は購入シーケンスの処理に移行します。
リカバリーシーケンス¶
「サブスクリプション処理状態」とリカバリー処理の要否¶
No. |
ゲームクライアント表示フラグ |
障害発生箇所 |
想定状況 |
リカバリー処理 |
|---|---|---|---|---|
1 |
レコード無し |
ゲーム端末 |
継続後にゲームサーバーへリクエストできなかった場合。 |
必要 |
ゲームサーバー |
ゲーム端末からリクエストを受信したが、XGへ「サブスクリプション購入検証API」をリクエストできなかった場合。
XGへ「サブスクリプション購入検証API」をリクエスト後、XGからレスポンスを受信した後の処理に失敗した場合。
|
|||
XG or ストア |
「サブスクリプション購入検証API」でゲームサーバーからリクエストを受信したが、レスポンスに失敗した場合。 |
|||
ゲームサーバー |
「サブスクリプション購入検証API」成功後、XGへ「サブスクリプション継続API」をリクエストできなかった場合。
XGへ「サブスクリプション継続API」をリクエスト後、XGサブスクリプション通知を受信する前に処理が中断した場合。
|
|||
XG or ストア |
「サブスクリプション継続API」でXGサブスクリプション通知送信前にエラーが発生した場合(XG側の処理)。 |
|||
2 |
未表示 |
ゲームサーバー |
XGサブスクリプション通知を受信してレコード作成後、ゲーム端末に結果を返却する前に処理が中断した場合。
※利用権は付与済みだが、XG側のゲーム内通貨発行が未完了の可能性あり。
|
必要 |
XG |
XGサブスクリプション通知受信シーケンスでゲームサーバーへの通知成功後、XG側の後続処理(ゲーム内通貨発行等)でエラーが発生した場合。
※利用権は付与済み。
|
|||
3 |
表示済み |
ゲームサーバー |
XGから処理成功のレスポンスを受信したが、ゲーム端末に結果を返却する処理が出来なかった場合。 |
不要 |
ゲーム端末 |
finishTransactionを実行できなかった場合。 |
App Storeサーバー通知とサブスクリプション状態一覧¶
注釈
notificationType |
subtype |
説明 |
サブスクリプション状態 |
サブスクリプション状態変更イベント |
|---|---|---|---|---|
SUBSCRIBED |
INITIAL_BUY |
サブスクリプション購入 |
有効(active) |
purchase |
DID_RENEW |
サブスクリプション継続 |
有効(active) |
renewal |
|
SUBSCRIBED |
RESUBSCRIBE |
サブスクリプション再登録(App Storeのみ) |
有効(active) |
purchase |
DID_RENEW |
BILLING_RECOVERY |
サブスクリプション復元 |
有効(active) |
recovered |
DID_CHANGE_RENEWAL_STATUS |
AUTO_RENEW_ENABLED |
自動更新の再開 |
有効(active) |
restart |
DID_CHANGE_RENEWAL_STATUS |
AUTO_RENEW_DISABLED |
自動更新のキャンセル |
キャンセル(canceled) |
canceled |
DID_FAIL_TO_RENEW |
サブスクリプション継続失敗 |
猶予期間(grace_period) |
grace_period |
|
DID_FAIL_TO_RENEW |
GRACE_PERIOD |
サブスクリプション継続失敗(猶予期間) |
猶予期間(grace_period) |
grace_period |
GRACE_PERIOD_EXPIRED |
猶予期間期限切れ |
保留中(on_hold) |
on_hold |
|
EXPIRED |
VOLUNTARY |
サブスクリプション期限切れ(任意) |
期限切れ(expired) |
expired |
EXPIRED |
BILLING_RETRY |
サブスクリプション期限切れ(請求再試行) |
期限切れ(expired) |
expired |
EXPIRED |
PRICE_INCREASE |
サブスクリプション期限切れ(価格上昇) |
期限切れ(expired) |
expired |
EXPIRED |
PRODUCT_NOT_FOR_SALE |
サブスクリプション期限切れ(販売停止) |
期限切れ(expired) |
expired |
REFUND |
返金・払い戻し |
返金済み(revoked) |
revoked |
|
REVOKE |
返金・払い戻し |
返金済み(revoked) |
revoked |
Google Play¶
リアルタイム デベロッパー通知(RTDN)を受けとり、サブスクリプションの状態変更します。
全体の流れ¶
リアルタイム デベロッパー通知¶
リアルタイム デベロッパー通知(RTDN)によるサブスクリプションの状態変更を処理するフローです。 XGがリアルタイム デベロッパー通知(RTDN)を受信して処理します。
リアルタイム デベロッパー通知受信¶
XGがGoogle Playからのリアルタイム デベロッパー通知(RTDN)を受信し、Google Play側のサブスクリプション情報を取得した上で通知を保存します。
注釈
XGがリアルタイム デベロッパー通知(RTDN)を受信します。 通知に含まれるPackageNameからXG ProjectIDを特定し、通知を保存します。
リアルタイム デベロッパー通知処理(バッチ)¶
バッチ処理で定期的に未処理の通知を処理します。
リアルタイム デベロッパー通知とサブスクリプション状態一覧¶
注釈
notificationType |
説明 |
サブスクリプション状態 |
サブスクリプション状態変更イベント |
|---|---|---|---|
SUBSCRIPTION_RECOVERED (1) |
サブスクリプション復元 |
有効(active) |
recovered |
SUBSCRIPTION_RENEWED (2) |
サブスクリプション継続 |
有効(active) |
renewal |
SUBSCRIPTION_CANCELED (3) |
サブスクリプションキャンセル |
キャンセル(canceled) |
canceled |
SUBSCRIPTION_PURCHASED (4) |
サブスクリプション購入 |
有効(active) |
purchase |
SUBSCRIPTION_ON_HOLD (5) |
サブスクリプション保留中 |
保留中(on_hold) |
on_hold |
SUBSCRIPTION_IN_GRACE_PERIOD (6) |
サブスクリプション猶予期間 |
猶予期間(grace_period) |
grace_period |
SUBSCRIPTION_RESTARTED (7) |
サブスクリプション再開 |
有効(active) |
restart |
SUBSCRIPTION_PAUSED (10) |
サブスクリプション停止 |
停止(paused) |
paused |
SUBSCRIPTION_REVOKED (12) |
サブスクリプション返金 |
返金済み(revoked) |
revoked |
SUBSCRIPTION_EXPIRED (13) |
サブスクリプション期限切れ |
期限切れ(expired) |
expired |
DMM GAMES¶
XGがバッチ処理で更新を検知して処理します。
バッチは定期的に実行されるため、実行タイミングによりキャンセルから期限切れまでの経過など状態変化の一部を個別のイベントとして検知できず、直近の状態のみが通知される場合があります。
サブスクリプションの継続に関する通知はバッチ実行のタイミングに依存するため、遅れて届くことがあります。次回のバッチ実行時にDMM GAMESから現在のサブスクリプション状態を取得するため、決済が完了していれば検知され通知されます。
サブスクリプション継続の検知
サブスクリプションの継続時、DMM GAMES側で決済が行われるとOrderIdが発行されます。バッチはlatestOrderIdが更新されているかどうかで、サブスクリプションの継続が行われたかを判別しています。このため、サブスクリプションの継続時の決済が完了した分は次回のバッチ実行で検知され通知されます。
全体の流れ¶
DMM GAMES バッチ¶
注釈
バッチによる定期実行で、サブスクリプションの状態を確認します。 latestOrderIdが更新されていない場合は、サブスクリプションの継続が行われていないため処理をスキップします。
DMM GAMESのサブスクリプションのステータスとXGサブスクリプション状態の対応一覧¶
DmmgamesSubscriptionState |
説明 |
サブスクリプション状態 |
サブスクリプション状態変更イベント |
|---|---|---|---|
SUBSCRIPTION_STATE_ACTIVE |
有効(購入時) |
有効(active) |
purchase |
SUBSCRIPTION_STATE_ACTIVE |
有効(継続時・latestOrderId更新時) |
有効(active) |
renewal |
SUBSCRIPTION_STATE_CANCELED |
キャンセル |
キャンセル(canceled) |
canceled |
SUBSCRIPTION_STATE_EXPIRED |
期限切れ |
期限切れ(expired) |
expired |