对于自动续订订阅,除了expires_date_ms之外,我还应该检查cancel_date_ms吗?

Dmi*_*kov 3 subscription in-app-purchase ios auto-renewable

我正在我的应用程序中实现自动续订订阅。

目前,为了检查用户是否有有效订阅,我检查了latest_receipt_infoApple/verifyReceipt服务返回的响应 JSON 中的数组中的所有记录,找到最大的记录expires_date_ms并检查该日期是否是将来的日期。在检查日期之前,我还会检查该status字段是否为 0(收据有效)。

本来以为这样就够了,但是最近发现还有一个领域—— cancellation_date_ms。据我从文档中了解到,如果用户通过 Apple 支持取消了订阅,则会出现此文件。

来自(苹果文档

您可以使用该值来:

确定是否停止提供与购买相关的内容。

检查是否有任何最新的续订交易,这可能表明用户重新启动或升级了其订阅,以进行自动续订订阅购买。

所以我想知道,如果用户通过Apple支持取消订阅,这会影响expires_date_ms当前的订阅期限吗?所以下次我检查时expires_date_ms,我知道订阅未激活。

或者是否expires_date_ms与用户取消订阅之前保持相同,所以我cancellation_date_ms也需要检查?

app*_*hud 7

cancellation_date_ms您也应该检查一下。Expires_date当客户通过 Apple 支持取消订阅时,该字段不会更改。

以下是带有退款的生产 JSON 示例:

"latest_receipt_info": [
    {
        "quantity": "1",
        "product_id": "XXX",
        "transaction_id": "150000567873035",
        "original_transaction_id": "150000567873035",
        "purchase_date": "2019-11-10 17:37:05 Etc/GMT",
        "purchase_date_ms": "1573407425000",
        "purchase_date_pst": "2019-11-10 09:37:05 America/Los_Angeles",
        "original_purchase_date": "2019-11-10 17:37:06 Etc/GMT",
        "original_purchase_date_ms": "1573407426000",
        "original_purchase_date_pst": "2019-11-10 09:37:06 America/Los_Angeles",
        "expires_date": "2019-12-10 17:37:05 Etc/GMT",
        "expires_date_ms": "1575999425000",
        "expires_date_pst": "2019-12-10 09:37:05 America/Los_Angeles",
        "cancellation_date": "2019-12-05 19:14:48 Etc/GMT",
        "cancellation_date_ms": "1575573288000",
        "cancellation_date_pst": "2019-12-05 11:14:48 America/Los_Angeles",
        "web_order_line_item_id": "150000194283402",
        "is_trial_period": "false",
        "is_in_intro_offer_period": "false",
        "cancellation_reason": "0",
        "subscription_group_identifier": "20502261"
    }
],
"pending_renewal_info": [
    {
        "auto_renew_product_id": "XXX",
        "original_transaction_id": "150000567873035",
        "product_id": "XXX",
        "auto_renew_status": "0"
    }
]}
Run Code Online (Sandbox Code Playgroud)