iOS订阅DID_CHANGE_RENEWAL_STATUS通知:latest_expired_receipt与Latest_receipt

时间:2019-06-07 07:30:51

标签: ios subscription

我正在为我的iOS应用添加订阅,但遇到一些非常烦人的不一致之处:

我的服务器正在监听来自苹果的DID_CHANGE_RENEWAL_STATUS通知:

{
    "auto_renew_status_change_date": "2019-06-05 13:42:43 Etc/GMT",
    "environment": "Sandbox",
    "auto_renew_status": "false",
    "auto_renew_status_change_date_pst": "2019-06-05 06:42:43 America/Los_Angeles",
    "latest_expired_receipt": "ewoJIn...",
    "latest_expired_receipt_info": ⊖{
        "original_transaction_id": "10000001010101010",
        "expires_date_formatted": "2019-06-05 13:43:13 Etc/GMT",
        ...
    },
    "password": "xxxxxxxxx",
    "auto_renew_status_change_date_ms": "1559742163000",
    "auto_renew_product_id": "com.my.product",
    "notification_type": "DID_CHANGE_RENEWAL_STATUS"
}

在测试期间,通知几乎在所有情况下都包含latest_expired_receiptlatest_expired_receipt_info

有些消息包含latest_receiptlatest_receipt_info。除了这种差异之外,消息的结构是相同的("auto_renew_status": "false"auto_renew_status_change_date 之前expires_date_formatted等)

Apple是否会随机更改结构以使实施订阅更加有趣,或者何时使用哪种结构有逻辑吗?

当然,我可以简单地修改服务器代码以检查latest_receipt OR latest_expired_receipt是否可用,但这将是一种快速而肮脏的解决方案。我希望了解什么时候可以期待哪个内容/结构...

3 个答案:

答案 0 :(得分:1)

latest_expired_receipt_info-对于过期交易,此数组显示在通知中,而不是last_receipt_info。您可以查看Apple的官方文档here。 还要注意每个Apple的文档:已计划弃用以下顶级对象:latest_receipt,latest_receipt_info,latest_expired_receipt和Latest_expired_receipt_info。

您还可以考虑使用像Qonversion.io这样的第三方服务,以避免麻烦地实现订阅并立即使用订阅分析集成。

答案 1 :(得分:1)

苹果不断使开发人员的生活更加艰难。

如App Store服务器通知文档中所述,顶级对象 latest_receipt,latest_receipt_info,latest_expired_receipt和Latest_expired_receipt_info 已计划弃用。这可能是通知行为不同的原因。

您应该更新代码,以依赖 unified_receipt 中的 latest_receipt latest_receipt_info >对象。 test 来源:https://developer.apple.com/documentation/appstoreservernotifications/responsebody

答案 2 :(得分:0)

如果在自动续订状态发生更改时订单已过期,您将获得Latest_expired_receipt_info和Latest_expired_receipt(这种情况包括在计费重试中的订单,并且应用商店无法在计费重试期间续订,或者订单已退款),在其他情况下,如果订阅仍然有效,您将获得Latest_receipt和Latest_receipt_info