ios - 具有多个触发器的 Apple 服务器到服务器通知
问题描述
苹果表示,对于某些订阅事件,它们会触发多个通知。假设我想知道用户是否取消了他们的订阅,以便我可以为他们提供另一个更便宜的选择。
我可以听听以DID_CHANGE_RENEWAL_STATUS
确定他们何时关闭自动续订。但是,有一个问题——如果用户升级到另一个 SKU,则会触发相同的通知。事实上,根据他们的文档,它会触发三个通知:CANCEL
、DID_CHANGE_RENEWAL_STATUS
、INTERACTIVE_RENEWAL
。
我想区分这些场景。显然,由于这些是异步操作,因此无法保证到达的顺序。但是,我想知道我是否可以期望所有三个通知都会以相同的方式到达unified_receipt
?如果是这样,我可以收听DID_CHANGE_RENEWAL_STATUS
通知,检查unified_receipt
,如果我发现我的用户没有注册另一个产品,我可以为他们提供另一个订阅选项。
但是,文档没有提到 Apple 是否保证在发送多个通知的情况下,所有通知都会以相同的unified_receipt
. 这将是合乎逻辑的......但是制作notification_type
一个数组来简化事情也是合乎逻辑的。而且,鉴于 Apple 还没有这样做,我担心我们不能期望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中的代码示例可以为您提供有关如何管理通知中信息的一些想法。
代码示例展示了如何从通知中提取信息;它没有对您的问题给出确切的回答,但可以为您提供有关如何管理它们的一些见解。
推荐阅读
- sql - 从 SQL Server 表的查询中提取外键约束和引用列
- python - 将列从一个数据帧映射到另一个具有多个 id 和日期的数据帧
- textarea - 如何实现多行输出
- css - 仅在显示引导模式后才应用 CSS 动画
- html - 粘性位置 + 顶部的 Flex 对齐锚点
- java - Thymeleaf 未在页面上显示正确的字符串,但从模型中正确打印
- javascript - Cheerio 找到以字符串开头的类的孩子
- javascript - getConnectedNodes 方向参数
- kotlin - 为什么服务器会出现 Kotlin 编译错误?
- javascript - 如何合并两个数组并按位置排列结果?