Apple服务器到服务器通知具有多个触发器

问题描述

Apple states,对于某些订阅事件,它们会触发多个通知。假设我希望了解用户是否已取消订阅,以便为他们提供另一个更便宜的选择。

我可以听DID_CHANGE_renewal_STATUS来确定何时关闭自动更新功能。但是,存在一个问题–如果用户升级到另一个SKU,则将触发相同的通知。实际上,根据他们的文档,它将触发三个通知CANCELDID_CHANGE_renewal_STATUSINteraCTIVE_renewal

我想区分这些情况。显然,由于这些是异步操作,因此不能保证到达的顺序。但是,我想知道我是否可以期望所有三个通知都将以相同的unified_receipt到达?如果是这样,我可以收听DID_CHANGE_renewal_STATUS通知,检查unified_receipt,如果看到我的用户尚未注册其他产品,则可以为他们提供另一个订阅选项。

但是,文档没有提到Apple是否保证在发送多个通知的情况下,所有通知都将以相同的unified_receipt到达。这样做是合乎逻辑的……但是将notification_type做成一个数组来简化事情也是合乎逻辑的。而且,鉴于苹果公司还没有这样做,我担心我们不能指望unified_receipt对于连续的通知都是一样的。

任何人都有可以分享的经验吗?

解决方法

在今天 (20210404) 的文档中,您可以看到多个通知已更改(将它们与 2020 年 9 月的活动通知进行比较)。例如,升级已从 3 个通知传递到 2 个通知(如果文档没有说谎,则不发送 CANCEL ......)。

也许您可以在 pending_renewal_info 字段中检测到您需要查看的内容。并且所有多个通知中的 original_transaction_id 应该相同。

也许 https://developer.apple.com/documentation/storekit/in-app_purchase/subscriptions_and_offers/determining_service_entitlement_on_the_server 中的代码示例可以让您了解如何管理通知中的信息。

代码示例展示了如何从通知中提取信息;它不能准确回答您的问题,但可以让您深入了解如何管理这些问题。