Send consumption information v2
アプリユーザーが返金をリクエストする際に、ユーザーの消費情報をアプリストアに送信するAPIを提供します。
「消費情報伝送」APIは、HiveサーバーとアプリサーバーとのServer-to-Server通信方式で、Hiveサーバーがアプリサーバーに消費情報伝送リクエストを送信すると、アプリサーバーが応答値をHiveサーバーに返します。
Note
現在、消費情報の送信はApple App Storeのみサポートされています。
動作フロー¶
「消費情報伝送」APIの呼び出しおよび応答の全体的な動作フローをまとめると、以下の通りです。
- アプリ: APIエンドポイントを構成してサーバーURLを準備
- アプリ: Hive コンソールで消費情報伝送の使用を選択し、サーバーURLを登録
- アプリクライアント: アプリを実行した状態でアプリ内商品の消費情報伝送に同意
- アプリユーザー: アプリで返金をリクエスト
- Apple: Hive サーバーに消費情報リクエスト(CONSUMPTION_REQUEST)を送信
- Hive サーバー: アプリで登録したサーバーURLにPOST APIリクエストを送信し、アプリサーバーから応答値として消費情報データを受信
- Hive サーバー: アプリストアに消費情報を送信(成功時、AppleがHTTP 202で応答)
Warning
アプリクライアントで同意ポップアップで情報伝送に同意しない場合、Hive サーバーはアプリサーバーからデータを受信しても、これをアプリストアに送信できません。ユーザーの同意有無(customerConsented)はアプリサーバーが送信するものではなく、Hive サーバーが独自に設定します。
アプリストアに送信する消費情報の中には、アプリサーバーにのみ存在するデータもあります。この場合、Hive サーバーが消費情報をアプリストアに送信するには、アプリサーバーが先にHive サーバーにデータを渡す必要があります。
アプリサーバーURLは、アプリサーバーがHive サーバーにデータを渡すために、アプリサーバー側で開放しているAPIエンドポイントです。APIエンドポイントを構成した後、アプリサーバーURLとして登録すると、ユーザーが返金をリクエストするたびにHive サーバーがこのAPIエンドポイントにPOSTリクエストを行い、必要なデータをアプリサーバーから受け取ります。Hive サーバーはこれらのデータを集約し、アプリに代わってアプリストアへの消費情報伝送を完了します。
APIエンドポイントの構成(サーバーURL)¶
アプリサーバーは、サーバーURLとして登録するAPIエンドポイントでリクエストを受信した際、リクエストパラメータのユーザー情報(player_id)と取引情報(transaction_id)を使用して消費情報を照会し、応答規約に沿ったデータを返す必要があります。
ファイアウォールルールの解除¶
Hive サーバーがアプリサーバーのAPIエンドポイントにリクエストを送信できるように、アプリサーバー側で以下のIPアドレスに対するファイアウォールのインバウンドルールを解除する必要があります。
| Hive サーバーIP |
|---|
| 15.165.223.210 |
| 3.34.158.195 |
| 43.202.20.33 |
| 13.209.91.38 |
| 3.34.235.15 |
| 15.165.134.120 |
ファイアウォールルールを解除した後、以下の内容を参考にAPIエンドポイントを構成します。
APIリクエスト(Hive サーバー → アプリサーバー)の構成¶
Hive サーバーからアプリサーバーに送信するPOSTリクエスト情報です。
| API情報 | 説明 |
|---|---|
| Method | POST |
| Response Format | JSON |
| Content-type | application/json |
Request body¶
リクエスト本文の情報は以下の通りです。
| 名称 | タイプ | 必須有無 (必須: M, オプション: O) | 説明 |
|---|---|---|---|
| gameindex | Integer | M | アプリセンターゲームインデックス |
| appid | String | M | アプリセンターAppID |
| server_id | String | M | アプリサーバーID |
| player_id | String | M | アプリ内ユーザー識別子(購入検証時に使用するユーザー識別値)。V1のuser_seqに該当 |
| transaction_id | String | M | Apple元取引ID(originalTransactionId) |
リクエスト本文の例は以下の通りです。
{
"gameindex": 539,
"appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
"server_id": "server_01",
"player_id": "222333",
"transaction_id": "2000000123456789"
}
API応答(アプリサーバー → Hive サーバー)の構成¶
アプリサーバーは、処理結果コード(code)、結果メッセージ(message)、消費情報(data)をHive サーバーに渡します。
Response body¶
Hive サーバーはcodeの値で成功可否を判定します。200の場合は成功と見なしてdataを使用し、それ以外のコードの場合は該当の件を送信せず、messageを理由として記録します。codeは必須であり、送信されない場合はエラーとして処理し、該当の件を送信しません。
| 名称 | タイプ | 必須有無 (必須: M, オプション: O) | 説明 |
|---|---|---|---|
| code | Integer | M | 処理結果コード(下表参照)。200のみ成功であり、それ以外のコードはエラーとして処理 |
| message | String | O | 処理結果メッセージ。エラー時の理由説明用 |
| data | Object | M | 応答データ(成功時は必須) |
| ┕ delivery_status | String | M | 消耗品の配送状態。以下の配送状態の値のいずれか |
| ┕ refund_preference | String | O | 返金の好み。以下の返金の好みの値のいずれか |
| ┕ consumption_percentage | Integer | O | 消費比率。millipercent単位で0~100000(100000 = 100%) |
| ┕ sample_content_provided | Integer | O | サンプルコンテンツ提供有無。0または1 |
応答成功の例は以下の通りです。
{
"code": 200,
"message": "OK",
"data": {
"delivery_status": "DELIVERED",
"refund_preference": "GRANT_FULL",
"consumption_percentage": 100000,
"sample_content_provided": 0
}
}
応答コード¶
| 値 | 説明 |
|---|---|
| 200 | 成功 |
| 400 | 不正なリクエスト値 |
| 500 | サーバーエラー |
配送状態(delivery_status)¶
消耗品の配送状態を表し、以下の5つの値のいずれかである必要があります(必須)。
| 値 | 意味 |
|---|---|
| DELIVERED | 消耗品を正常に配送し、正常に動作 |
| UNDELIVERED_QUALITY_ISSUE | 品質問題により配送できなかった |
| UNDELIVERED_WRONG_ITEM | 購入したものと異なる(誤った)アイテムを配送した |
| UNDELIVERED_SERVER_OUTAGE | サーバー障害により配送できなかった |
| UNDELIVERED_OTHER | その他の理由により配送できなかった |
返金の好み(refund_preference)¶
アプリが希望する返金処理の方向をAppleに伝えます(任意)。値を送信する場合は、以下の3つのいずれかである必要があります。
| 値 | 意味 |
|---|---|
| GRANT_FULL | 全額返金の付与を希望 |
| DECLINE | 返金しないこと(拒否)を希望 |
| GRANT_PRORATED | 一部(比例)返金の付与を希望(主にサブスクリプション) |
Warning
以下の値が無効な場合、アプリストアに送信されず、該当の件は除外されます。
delivery_statusは必須であり、上記5つの値のいずれかである必要があります。refund_preferenceを送信する場合は、上記3つの値のいずれかである必要があります。consumption_percentageを送信する場合は、0~100000の範囲の整数である必要があります。
Note
以下は、Hive サーバーがAppleの規則に従って自動的に調整する動作です。
delivery_statusがDELIVEREDでない場合、consumption_percentageは0として送信されます。refund_preferenceがGRANT_PRORATED(サブスクリプション)の場合、consumption_percentageは省略されます。