サブスクリプション購入シーケンス

サブスクリプションの購入を処理するシーケンスです。
ゲーム端末がストアで購入後、サブスクリプション購入検証API・サブスクリプション購入APIを経て、XGサブスクリプション通知受信シーケンス で利用権の付与等が行われます。

注釈

一度解約・期限切れになったユーザーがサブスクリプションを再購入(再加入)する場合も、このシーケンスで処理します。

通常シーケンス


サブスクリプション購入シーケンス実装要件

【MUST】購入前のappAccountTokenのセット(App Store)

App Storeへの購入リクエスト前に、appAccountTokenをセットしてください。
セットされた値は、App Storeサーバー通知受信時に処理を行っているXG環境のユーザーへの通知かどうかの検証に使用されます。
また、サブスクリプション購入検証APIの「サブスクリプション購入情報を検証」でリクエストユーザーと一致するかのチェックが行われます。

注釈

Unity IAPを利用する場合は、 appAccountToken に対応したバージョンが必要です。詳細は 動作要件・バージョン要件 を参照してください。

【MUST】購入前のobfuscatedAccountIdのセット(Google Play)

Google Playへの購入リクエスト前に、obfuscatedAccountIdをセットしてください。
セットされた値は、リアルタイム デベロッパー通知受信時に処理を行っているXG環境のユーザーへの通知かどうかの検証に使用されます。
また、サブスクリプション購入検証APIの「サブスクリプション購入情報を検証」でリクエストユーザーと一致するかのチェックが行われます。

注釈

Unity IAPを利用する場合は、 obfuscatedAccountId に対応したバージョンが必要です。詳細は 動作要件・バージョン要件 を参照してください。

【MUST】利用権付与とXG側の処理の順番

XGサブスクリプション通知シーケンスで利用権付与が行われるため、サブスクリプション購入APIリクエストより先にサブスクリプション購入検証APIリクエストを行い、XG側の処理より先にゲームサーバー側の処理を行なってください。

サブスクリプション購入APIリクエストのストアがGoogle Playの場合、XG側でGoogle Playの非消費型アイテムの承認を行っており、この時点で購入のトランザクションが完了します。
先にXG側の処理を行いゲームサーバー側の処理の前に何らかの理由で処理が中断されると、購入のトランザクションが完了しているためゲーム端末のトランザクションのリストア処理で購入完了メソッドが呼び出されず「利用権付与」を行うことができません。このような事象の発生を防ぐため、先にゲームサーバー側の処理を行う必要があります。

リカバリーシーケンス

「サブスクリプション処理状態」とリカバリー処理の要否

「サブスクリプション処理状態」とリカバリー処理の要否

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、DMM GAMESで起こり得ます。