【问题标题】:iOS auto-renewable subscriptions and restoreCompletedTransactions(): is the transaction removed from the queue after expiration or cancellation?iOS 自动续订订阅和 restoreCompletedTransactions():事务在过期或取消后是否从队列中移除?
【发布时间】:2025-12-25 21:35:11
【问题描述】:

经过长时间的寻找答案,我想在这里问一个非常简单的问题。与可使用restoreCompletedTransactions() 方法获得的交易列表中的到期日期之后是否会删除与自动更新订阅相关的交易?

在最简单的实现中,是否可以在不使用Validating Receipts 的情况下管理与auto-renewable subscription 关联的应用程序内容?并且只使用restoreCompletedTransactions() 方法的结果?

【问题讨论】:

    标签: ios xcode in-app-purchase auto-renewing


    【解决方案1】:

    您有两个问题。

    1) 与自动更新订阅相关的交易是否在到期日期之后从可使用 restoreCompletedTransactions() 方法获得的交易列表中删除?

    答案: 不。这些条目将始终保留在那里,当您验证收据时,您会得到它作为回应。通过恢复购买不会从收据中删除现有条目。当您使用 Sandbox 帐户测试应用内购买时,您将有 35 分钟的时间在 8 小时内使用该帐户。你想做什么,就可以做什么。您可以再次订阅(在这种情况下,系统会告诉我们您的订阅仍在运行)。首次购买35分钟后,计划将被视为取消,您需要再次订阅(仅在沙盒模式下,在生产模式下可能不会要求再次订阅?我不确定。)

    2) 是否可以在不使用验证收据的情况下管理与自动续订订阅相关的应用程序内容

    回答: 否。最好使用收据验证来锁定/解锁您的应用程序的内容。

    【讨论】:

    • 感谢您的回答。 android 实现有一个类似的queryPurchases() 方法。 Google Play 返回由登录到设备的用户帐户进行的购买。如果请求成功,Play 计费库将查询结果存储在购买对象列表中。此列表中仅显示有效订阅。只要应用内产品在此列表中,用户就应该有权访问它。奇怪的是,在 ios 中一切都复杂得多。
    • @denri11,是的,iOS 中有关 IAP 的一些观点很奇怪。但在收据验证中,您可以使用 latest_receipt 键进行进一步验证和最新购买历史记录。当我们谈到 IAP 时,让我分享一件许多开发人员共同面临的更重要的事情。请在收到成功/失败响应后完成交易。否则会导致应用出现问题。