我正在升级一个已经使用App Store服务器通知的现有iOS IAP订阅系统。我现有的解决方案使用现在已弃用的latest_receipt
、latest_receipt_info
、latest_expired_receipt
和latest_expired_receipt_info
字段。根据苹果公司的说法,这些字段现在都被单个unified_receipt
字段所取代。
在观看了所有必需的WWDC视频并筛选了可用的小文档后,我仍然有一些问题没有得到回答。
latest_receipt_info
字段记录为:
一个数组,包含latest_receipt中解码值的最新100个应用内购买交易。
这意味着此数组将包含客户的整个交易历史。这不仅包括相关订阅,还包括客户可能购买的任何交易产品。
我的问题是如何在这个数组中找到相关的事务?在这种情况下,相关事务将是触发事件的事务(例如CANCEL
(。我需要这个事务来更新我们的后端数据库,以反映当前的订阅状态。例如,在CANCEL
事件中将订阅结束日期更新为cancellation_date
。
关于pending_renewal_info
阵列,我也有类似的问题。根据现有文档,我不清楚是否所有订阅有效(甚至可能过期?(的客户都会在该阵列中有一个条目。
一个元素数组,指的是过去打开或失败的自动续订。
我还需要在该字段中找到相关事务,以执行诸如切换DID_CHANGE_RENEWAL_STATUS
事件的订阅状态或更新DID_FAIL_TO_RENEW
事件的计费状态之类的操作。从文档来看,pending_renewal_info
中似乎没有足够的信息来计算当前的订阅续订状态。
总的来说,我的问题实际上可以归结为:
我能确定unified_receipt.latest_receipt_info
和unified_receipt.pending_renewal_info
中都会有一个条目与顶级事件auto_renew_product_id
匹配吗?如果是,我应该如何在相应的数组中找到相关的对象?每个auto_renew_product_id
只会有一个条目吗?还是应该搜索数组并提取第一个匹配项?
我发现unified_receipt.latest_receipt_info
数组中的事务是按购买日期从最晚到最早排序的。确保您可以找到顶级事件auto_renew_product_id
。
但是,为了更新订阅状态或计费状态,我使用/verifyRecipt
的返回值,您可以通过向Apple verifyReceipt服务器请求收据数据和密码来获得该值(https://developer.apple.com/documentation/appstorereceipts/verifyreceipt)。注意,输入的接收数据是unified_receipt.latest_receipt
,并且响应共享与unified_receipt
相同的结构。