自动订阅应用内购买:恢复后续续订

时间:2011-02-18 01:57:30

标签: cocoa-touch ios in-app-purchase subscription

根据Apple In App Purchase编程指南:

  

App Store每次续订订阅时都会创建一个单独的交易。当您的应用程序恢复以前的购买时,Store Kit会将每笔交易交付给您的应用程序。

让我们假设我的应用订阅仅限客户端(没有服务器组件)。验证后续续费的最简单方法似乎是每月恢复以前的购买。

但是,每次拨打restoreCompletedTransactions时都会弹出用户的iTunes密码提示,这似乎是糟糕的用户体验。唯一可以使用服务器收据验证码(以及新的“共享密码”)吗?

2 个答案:

答案 0 :(得分:3)

App Store会在每次自动续订时调用paymentQueue并发布交易。该事务使用transaction.transactionState == SKPaymentTransactionStateRestored。

发布

问题是,不幸的是,这只会发布到一台设备上。第二个设备无法发布。因此,要检测自动续订,或者更确切地说检测缺少自动续订并拒绝任何设备继续订阅,您必须执行restoreCompletedTransaction或“http发布包含最后一个事务的64位编码JSON”。如果是fomer,用户需要提供密码;正如你所指出的,这是侵入性的。如果是后者,则需要许多额外的编码。所以,我在回答你的问题时的问题是......为什么StoreKit没有命令:

(不存在) - [[SKPaymentQueue defaultQueue] restoreAttachedTransactions:(NSArray *)transactions];

此命令将像restoreCompletedTransactions一样流动,但它只会恢复附加的事务,最重要的是,它不需要用户登录。它具有与“http发布包含最后一个事务的64位编码JSON”相同的安全保护,它允许整个In App Purchase过程在StoreKit中完成,而不是需要Web发布代码。

如果这对您有意义,请建议如何将其发送给Apple ....谢谢。

答案 1 :(得分:0)

如果您没有服务器组件,那么您可以存储此信息的唯一位置是本地文件/ database / config

当本地数据库出现问题时,restoreCompletedTransactions选项会出现,您应该在高级设置面板上的某个位置放置一个按钮,以恢复之前的所有交易。

因此,您必须信任本地存储的数据。通常,这是安全的,因为您无法更改本地文件系统(除非您越狱)。如果您不想信任这样的用户,您可以选择加密它......