根据Apple In App Purchase编程指南:
App Store每次续订订阅时都会创建一个单独的交易。当您的应用程序恢复以前的购买时,Store Kit会将每笔交易交付给您的应用程序。
让我们假设我的应用订阅仅限客户端(没有服务器组件)。验证后续续费的最简单方法似乎是每月恢复以前的购买。
但是,每次拨打restoreCompletedTransactions
时都会弹出用户的iTunes密码提示,这似乎是糟糕的用户体验。唯一可以使用服务器收据验证码(以及新的“共享密码”)吗?
答案 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选项会出现,您应该在高级设置面板上的某个位置放置一个按钮,以恢复之前的所有交易。
因此,您必须信任本地存储的数据。通常,这是安全的,因为您无法更改本地文件系统(除非您越狱)。如果您不想信任这样的用户,您可以选择加密它......