iOS 7 自动续订订阅到期

Posted

技术标签:

【中文标题】iOS 7 自动续订订阅到期【英文标题】:iOS 7 Auto-renewable subscription expiration 【发布时间】:2013-10-27 06:36:22 【问题描述】:

我正在尝试检查自动续订订阅在 ios7 上是否仍然有效。应用收据包含该订阅的到期日期信息。过了那段时间,我想刷新一下应用回执,看看订阅是否已经续订并且没有过期。

我们应该如何在不询问用户 iTunes 凭据的情况下刷新应用收据?

restoreCompletedTransactions 和 SKReceiptRefreshRequest 都需要用户的凭据。

来自Apple's "Working with Subscriptions" doc:

订阅成功续订后,Store Kit 会添加一个 交易队列的续订。 您的应用检查 启动时的事务队列,并以相同的方式处理更新 与任何其他交易一样。 请注意,如果您的应用已经在运行 当订阅更新时,不调用事务观察器; 您的应用会在下次启动时发现续订

在启动时检查事务队列是什么意思?我想上面提到的任何方法,但是应用程序要求用户输入他的凭据。

在 iOS7 中,我们不应该通过手机检查 Apple Server,而是检查应用程序的收据,对吧?

顺便说一下,我是在测试环境中开发的。应用程序的收据是否有可能在真实环境中自动更新?这就是我的问题的答案。

【问题讨论】:

【参考方案1】:

在启动时检查交易意味着每次运行应用时调用一次,而不是在购买之前。

[[SKPaymentQueue defaultQueue] addTransactionObserver:anObserver];

这样就可以处理任何续订或中断/不完整的交易。

【讨论】:

【参考方案2】:

你不能,它内置在操作系统的核心中,这是你可以做到的唯一方法。

事务队列是用户购买的东西的列表,iOS 仍在处理,当您的应用启动时,商店工具包将通过此列表并处理它。

苹果的意思是您不应该将其存储在您自己的服务器上并以这种方式进行验证。与过去一样,人们只是依靠 Apple 的服务器来验证它,然后被中间人攻击,这使得黑客可以免费获取东西。

我认为您需要验证收据,当订阅更新时,我相信苹果会在用户提供他的详细信息后立即向您的应用程序发送一个新的。

【讨论】:

以上是关于iOS 7 自动续订订阅到期的主要内容,如果未能解决你的问题,请参考以下文章

Stripe 提前续订订阅

在Braintree付款中搜索客户的有效订阅

验证服务器上的自动续订订阅收据

自动续订订阅 SKProduct.PeriodUnit == 7

iOS 应用内购买自动续订订阅管理

iOS中自动续订订阅背后的逻辑是啥