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

根据苹果应用内购买编程指南:

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

让我们想象我的应用程序订阅是仅客户端(无服务器组件)。 validation后续更新是否已经结算的最简单方法似乎是恢复以前的购买每月。

但是 ,每次调用restoreCompletedTransactions ,都会popup用户的iTunes密码提示,这似乎是不好的用户体验。 唯一的办法是使用服务器收据validation码(以及新的“共享密码”)?

App Store每次调用paymentQueue时都会自动更新一次事务。 该事务与transaction.transactionState == SKPaymentTransactionStateRestored一起发布。

问题是,不幸的是这只会发布到一个设备。 第二个设备没有获得发布。 因此,要检测自动更新,或者更确切地说,检测缺less自动更新并拒绝任何持续订阅的设备,您必须执行restoreCompletedTransaction或“http发布包含最后事务的64位编码的JSON”。 如果来了,用户需要给他们的密码; 正如你所指出的,这是侵入性的。 如果是后者,则需要大量额外的编码。 所以,我的问题在回答你的问题是…为什么不StoreKit有一个命令:

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

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

如果这对你有意义,请build议如何把这个给苹果….谢谢。

如果您没有服务器组件,则唯一可以存储此信息的位置是在本地文件/数据库/configuration中

当您的本地数据库出现问题时,可以使用restoreCompletedTransactions选项,您应该在高级设置面板上的某个位置放置一个button,以恢复以前的所有事务。

所以,你将不得不相信你在本地存储的数据。 通常情况下,这是安全的,因为你不能改变你的本地文件系统(除非你越狱)。 如果你不想这样信任你的用户,你可以selectencryption它…