IAP v4 リアルタイムサブスクリプションの通知

リアルタイムのサブスクリプション通知を使用すると、ゲームサーバーはHive IAPサーバーからユーザーのサブスクリプションステータス情報をリアルタイムで受信します。この情報を使用して、ユーザーはサブスクリプションの一時停止、保留、および一時停止機能を実装できます。

Warning

リアルタイムのサブスクリプション通知機能を使用するには、Market Consolで通知URLを設定する必要があります

リアルタイムサブスクリプション通知APIは、Hive IAPサーバーからゲームサーバーへの呼び出しを行い、リクエストボディにサブスクリプションステータスの変更情報を含めてリアルタイムで送信します。ゲームサーバーはサブスクリプションステータスの変更情報を受け取るため、HiveにAPIエンドポイント(URL)を提供する必要があります。

APIのURLはthe Hive コンソール > App Center > Game List > Game details > Game server > Market サーバー通知URLに登録できます。ゲームサーバーが地域ごとに分かれていて、各地域が通知を受け取る必要がある場合は、URLを一つずつ提供してください。その後、IAPはすべてのゲームサーバーに通知を送信します。

 

IAPは、Hiveサーバーからゲームサーバーにリアルタイムのサブスクリプション状態を送信します。したがって、ゲームサーバーが通知を受け取るために、以下のサーバーIPの受信ファイアウォールを開いていることを確認してください。

  • 43.202.181.138
  • 3.38.239.17

 

  • リクエスト 仕様 ( IAP > ゲーム サーバー)
    フィールド名 説明 タイプ 必須
    notification_type

      通知タイプ

    • Apple
    • Google: グレース期間中/保留中/一時停止中のサブスクリプションは、hiveiap_receipt_subscription_stateの値に基づいています。このフィールドを参照データとして使用してください。
    文字列 はい
    sub_type 通知のサブタイプ。これはAppleの通知のみに関するもので、サブタイプ情報です。 文字列 いいえ
    hiveiap_market_id 有料マーケットコード
    1. Apple App Store
    2. Google Play Store
    整数 はい
    hiveiap_receipt_verify_result マーケット検証サーバーから送信されたレシートの検証結果 オブジェクト はい
    hiveiap_receipt_start_date_ms サブスクリプションの開始時間 (Unix タイムスタンプミリ秒) 文字列 はい
    hiveiap_receipt_expire_date_ms サブスクリプションの終了時間 (Unix タイムスタンプミリ秒) この値が変更された場合、すべての通知タイプに対してゲーム内で適用する必要があります。たとえば、ユーザーのゲームアイテムのサブスクリプションの有効期限を変更する必要があります。 文字列 はい
    hiveiap_receipt_autoresume_date_ms
    • サブスクリプションが一時停止された場合の再開時間 (Unix タイムスタンプミリ秒)
    • 一時停止されていない場合は“”が受信されます
    文字列 いいえ
    hiveiap_receipt_subscription_state

    サブスクリプションの状態

    1. アクティブ
    2. グレース期間中
    3. 保留中
    4. 一時停止中
    5. 期限切れ
    現在、送信可能なデータはGoogleのサブスクリプションデータのみです。アカウントの保留および復元機能は、2020年11月1日から改訂されたGoogleポリシーに従って必須です。このAPIはサブスクリプションの状態をチェックします。
    • 猶予期間: ユーザーの支払い状態が正常に戻るまで有効期限を延長します(Google Play Consoleで設定された猶予期間のみ適用されます)。
    • アカウント保留: 支払いに問題があるため、コンテンツの使用許可は与えられませんが、支払い状態が正常に戻った後に有料サブスクリプションを復元する際にサブスクリプションの有効期限を延長します(最大30日間保留状態を維持します)。
    整数 N
    hiveiap_apple_info このオブジェクトは、Appleのサブスクリプションレシート検証結果において、サブスクリプションレシートを識別するためのキー値を持っています。これはApp Storeのサブスクリプションレシートにのみ使用されます。レスポンスコードが0(検証成功)の場合にのみ配信されます。 オブジェクト N
    ㄴ original_transaction_id これはAppleのサブスクリプションレシートを識別するためのキー値です。App Storeアカウントの場合、この値は同じ製品を購入した場合、またはアップグレード、ダウングレード、再購入、または購入がキャンセルされた同じグループ内の製品に対して同じままです(16文字まで許可されていますが、この文字列の長さに関する具体的なガイドはありません)。 文字列 N
    hiveiap_google_info Googleのサブスクリプションレシート検証結果において、レシートを識別するためのキー値 Play Storeのサブスクリプションレシートのみ。レスポンスコードが0(検証成功)の場合にのみ値を送信します。 オブジェクト N
    ㄴ purchase_token レシート内の購入トークン。 トークン値は200文字以上が必要で、Googleのガイドに制限がないため、長さの変更が可能です。 文字列 N
    ㄴ purchase_token_hash これは`purchase_token`フィールドの値をハッシュ化することによって生成されます(sha1)。 `purchase_token`値の長さが長いため、データベース内で検索し保存するためにハッシュ処理を行います(40文字)。 文字列 N
    ㄴ linked_purchase_token サブスクリプションレシートがアップグレード、ダウングレード、キャンセル、または再活性化の後に新たに発行された場合、このフィールドの値は古いレシート内の購入トークンを識別できます。 値がある場合は強制的に期限切れにすることをお勧めします。 トークン値は200文字以上が必要で、Googleのガイドに制限がないため、長さの変更が可能です。 (ただし、Play Storeでの再活性化の場合は新規発行はありません) 文字列 N
    ㄴ linked_purchase_token_hash これは`linked_purchase_token`フィールドの値をハッシュ化することによって生成されます(sha1)。 `linked_purchase_token`値の長さが長いため、データベース内で検索し保存するためにハッシュ処理を行います(40文字)。 文字列 N
    hiveiap_iap_payload これはゲーム会社によって定義された購入メタ情報です。 メタ情報が定義されていない場合、`null`を返します。 文字列 Y
    hiveiap_receipt_cancel_date_ms これは、サブスクリプションがキャンセルされた時刻(Unixタイムスタンプ、ms)です。デフォルト値は0です。 整数 Y
    hiveiap_receipt_refund_date_ms これは購入の返金が行われた時刻(Unixタイムスタンプ、ミリ秒)です。デフォルト値は0です。 整数 Y
  • コール ( IAP > ゲーム サーバー)
curl -L -v
-d '{"notification_type":"SUBSCRIBED","sub_type":"RESUBSCRIBE","hiveiap_market_id":1,"hiveiap_market_pid":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.arshive001","hiveiap_receipt_verify_result":{"status":0,"receipt":{"transactionId":"2000000326618738","originalTransactionId":"2000000287618347","webOrderLineItemId":"2000000026848658","bundleId":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal","productId":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.arshive001","subscriptionGroupIdentifier":"20519034","purchaseDate":1683534980000,"originalPurchaseDate":1677492217000,"expiresDate":1683535160000,"quantity":1,"type":"Auto-Renewable Subscription","appAccountToken":"5e657cde-3651-34c0-93fa-1e9cfccfafa2","inAppOwnershipType":"PURCHASED","signedDate":1688470718581,"environment":"Sandbox","transactionReason":"RENEWAL","storefront":"KOR","storefrontId":"143466"}},"hiveiap_receipt_start_date_ms":"1683534980000","hiveiap_receipt_expire_date_ms":"1683535160000","hiveiap_apple_info":{"original_transaction_id":"2000000287618347"},"hiveiap_iap_payload":"{\"server\":\"1\",\"character\":\"1\"}","hiveiap_receipt_cancel_date_ms":0,"hiveiap_receipt_refund_date_ms":0}' \
-H "Content-Type: text/html" \
https://sandbox-misample.com2us.net/hive/Iap_subscription_notification // (the API endpoint example provided from your game server)
curl -L -v
-d '{"notification_type":"13","hiveiap_market_id":2,"hiveiap_market_pid":"sub01","hiveiap_receipt_verify_result":{"kind":"androidpublisher#subscriptionPurchaseV2","startTime":"2023-07-25T08:00:19.285Z","regionCode":"KR","subscriptionState":"SUBSCRIPTION_STATE_EXPIRED","latestOrderId":"GPA.3319-2535-4331-99754..0","canceledStateContext":{"userInitiatedCancellation":{"cancelTime":"2023-07-25T08:07:21.881Z"}},"testPurchase":[],"acknowledgementState":"ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED","externalAccountIdentifiers":{"obfuscatedExternalAccountId":"84530982-c9c3-3114-b0dc-848dd7e8bf76"},"lineItems":[{"productId":"sub01","expiryTime":"2023-07-25T08:10:09.583Z","autoRenewingPlan":[],"offerDetails":{"basePlanId":"p1w"}}]},"hiveiap_receipt_start_date_ms":"1690272019000","hiveiap_receipt_expire_date_ms":"1690272609000","hiveiap_receipt_autoresume_date_ms":"","hiveiap_receipt_subscription_state":4,"hiveiap_google_info":{"purchase_token_hash":"5a109e5da69467a706a180fca423e09ab7671389","purchase_token":"eejgienjlbapbnojcnjipdib.AO-J1OxxtNGzvOT7-mSeeAORzZ0GZ90t33v7UQn-t4xPAPGLCQqQAPFmvDK3p3wO8ZwXfYCwmVk9pTI93P8k4IyZJn2XI7ES-EJEFPOLpmUzlXXsOndqbhu1oPRu7V4ddTIUCVB_cHjGKvRnZu1DUu2dEd603grO2Q","linked_purchase_token":"","linked_purchase_token_hash":""},"hiveiap_iap_payload":null,"hiveiap_receipt_cancel_date_ms":1690272441000,"hiveiap_receipt_refund_date_ms":0}' \
-H "Content-Type: text/html" \ (ゲームサーバーから提供されたAPIエンドポイントの例)
  • リクエスト ( IAP > ゲーム サーバー)<
> POST /hive/Iap_subscription_notification HTTP/2
> Host: misample.com2us.net // (the API endpoint example provided from your game server)
> user-agent: curl/7.68.0
> accept: /> content-type: text/html
> content-length: 1211
> POST /hive/Iap_subscription_notification HTTP/2
> Host: misample.com2us.net // (the API endpoint example provided from your game server)
> user-agent: curl/7.68.0
> accept: /> content-type: text/html
> content-length: 1369

 

  • レスポンス仕様 (ゲーム サーバー > IAP)
    フィールド名 説明 タイプ 必須
    result_code レスポンスコード
    • 0: アプリケーション成功。ゲームサーバーエラーでない限り成功として応答します
    • その他のコード: アプリケーション失敗
    整数 Y
    result_msg レスポンスメッセージ 文字列 Y

    • 応答 (ゲーム サーバー > IAP)
    < HTTP/2 200
    < server: nginx
    < date: Fri, 25 Mar 2022 06:56:17 GMT
    < content-type: application/json; charset=utf-8
    {"result_code":0,"result_msg":"OK"}</pre>