如何处理自动续订重新订阅?

Posted

技术标签:

【中文标题】如何处理自动续订重新订阅?【英文标题】:How to handle auto renewable subscription resubscribe? 【发布时间】:2021-06-21 23:42:03 【问题描述】:

我正在我的 ios 应用程序中实现自动更新订阅。在沙盒模式下,每月订阅 5 分钟后自动续订。我在 appDelegate 中添加了事务观察器。因此,当应用重新启动时,会调用更新的事务方法并且我会收到以下日志。

购买的支付商店产品 il_pkg1_1month_2 payment storee product purchase transaction id 可选(“1000000792969469”) 购买的支付商店产品 il_pkg1_1month_2 payment storee product purchase transaction id 可选("1000000792972183") 购买的支付商店产品 il_pkg1_1month_2 payment storee product purchase transaction id 可选("1000000792976003") 购买的支付商店产品 il_pkg1_1month_2 payment storee product purchase transaction id 可选("1000000792978690") 购买的支付商店产品 il_pkg1_1month_2 payment storee product purchase transaction id 可选("1000000792982052")

我的问题是

1) 当应用程序打开并更新事务时,不会调用此方法。这是正确的行为吗?

    我计划在调用此方法时(在服务器端)实施收据验证。所以假设当我打开应用程序并且交易被自动更新多次。我需要为每笔交易或最新的交易实施验证收据吗?如果应用已打开且交易自动续订,如何验证收据?

3)我在同一个订阅组中有 3 种计划。我无法在沙盒模式下升级/降级,是否可以在沙盒模式下测试升级/降级?

4)订阅到期后,如果我从管理订阅页面更新订阅,则调用更新的交易方法,但我得到的交易与续订前相同。即使交易到期日期与续订前相同。这是正确的行为吗,我需要做任何额外的事情吗?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

    这是预期的行为,另请注意,每次后续购买都有一个 original_transaction_id,因此您可以知道原始购买是什么。

    每当您调用服务器收据验证时,您都会发送应用当前拥有的收据数据,Apple 始终会返回最新的收据信息。因此,只要您想验证订阅是否仍然有效,或者任何后续转换以验证是否发生了重新订阅,您都可以致电 Apple。您还可以将应用收据中的数据存储在服务器上,以仅在服务器端不时检查,以验证订阅仍然有效且未被取消。

    我认为您曾经能够在沙盒中升级/降级,如果不是从设备设置中的沙盒帐户编辑页面,然后尝试在您的应用中允许降级/升级购买。至少我相信它应该使用 Xcode 12 App Store 配置本地 StoreKit 测试来工作。

    我不确定您看到的这种行为是否正常,如果您在订阅过期后订阅,它应该像新购买一样 - 但仍会有原始订阅的 original_transaction_id。

【讨论】:

以上是关于如何处理自动续订重新订阅?的主要内容,如果未能解决你的问题,请参考以下文章

处理“终身”订阅以及自动续订应用内购买

应用内购买,具有不同持续时间的多个自动续订订阅

如何处理 oidc 静默续订错误

如何处理重新订阅带有试用期的 Stripe 计划?

subscr_eot 之后的 PayPal,续订?

从自动续订切换到可续订订阅