我正在为我的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_receipt
和latest_expired_receipt_info
。
但有些消息包含latest_receipt
和latest_receipt_info
。除了这种差异之外,消息的结构是相同的("auto_renew_status": "false"
,auto_renew_status_change_date
之前expires_date_formatted
等)
Apple是否会随机更改结构以使实施订阅更加有趣,或者何时使用哪种结构有逻辑吗?
当然,我可以简单地修改服务器代码以检查latest_receipt
OR latest_expired_receipt
是否可用,但这将是一种快速而肮脏的解决方案。我希望了解什么时候可以期待哪个内容/结构...
答案 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 >对象。 来源:https://developer.apple.com/documentation/appstoreservernotifications/responsebody
答案 2 :(得分:0)
如果在自动续订状态发生更改时订单已过期,您将获得Latest_expired_receipt_info和Latest_expired_receipt(这种情况包括在计费重试中的订单,并且应用商店无法在计费重试期间续订,或者订单已退款),在其他情况下,如果订阅仍然有效,您将获得Latest_receipt和Latest_receipt_info