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

Posted

技术标签:

【中文标题】具有多个触发器的 Apple 服务器到服务器通知【英文标题】:Apple server to server notifications with multiple triggers 【发布时间】:2020-12-26 06:17:46 【问题描述】:

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 设为一个数组以简化事情也是合乎逻辑的。而且,鉴于 Apple 还没有这样做,我担心我们不能期望 unified_receipt 对于连续的通知是相同的。

有没有人有这方面的经验可以分享一下?

【问题讨论】:

【参考方案1】:

在今天的文档 (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 中的代码示例可以为您提供一些关于如何管理通知中的信息的想法。

代码示例展示了如何从通知中提取信息;它不能准确回答您的问题,但可以为您提供有关如何管理它们的一些见解。

【讨论】:

以上是关于具有多个触发器的 Apple 服务器到服务器通知的主要内容,如果未能解决你的问题,请参考以下文章

Apple iOS 应用内购买服务器到服务器通知的“取消”通知案例?

使用 PHP 从 Apple 增强推送通知中读取错误

什么是 Apple 服务器到服务器通知的重试策略

取消订阅 Apple 推送通知服务

Apple Push Notification 在共享服务器上不起作用

我们如何跟踪从 IBM MobileFirst 7.0 发送到 Apple APNS 服务器的推送通知?