Eye*_*all 15 cocoa-touch storekit in-app-purchase ios
这个问题涉及自动可再生IAP以及如何恢复它们.这些链接:这个和这个有没有帮助我很遗憾.
在我的应用程序中,我有用户订阅自动可再生应用程序内购买.他们可以订阅1个月,6个月或12个月.
订阅时,交易收据将发送到我的服务器以供以后验证.我不会立即验证收据,因为它会降低用户体验的速度(对苹果服务器的收据验证查询对我来说大约需要1到2秒).相反,我使用天真的方法并提供用户订阅的内容,而无需任何直接收据验证.我安排了一个cron作业,每天验证每个用户的收据,并撤销过期收据的权限.
既然苹果指南明确指出具有自动续订订阅的应用程序需要恢复功能,我选择实现它.
当我尝试在沙盒模式下恢复购买时,使用:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
我不仅获得当前订阅,还获得回调中所有先前订阅(包括过时订阅):
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Run Code Online (Sandbox Code Playgroud)
目前我已经尝试了大约30次IAP,这意味着上面的方法发送了30个不同的事务(过时和活动).对于这些交易中的每一个,我将交易收据上传到我的Web服务以供以后验证.
现在.如果最后一个事务具有过时的收据(但倒数第二个事务实际上是有效的),它将覆盖当前用户的当前(有效)收据,从而错误地撤销用户的权限.
基本上我的问题是,在调用时restoreCompletedTransactions我获得了过时和活动事务的列表.在服务器端,它们可能会互相失效.最理想的情况是,我只想检索一个事务(最相关)并将该收据发送到我的服务器以供以后验证.
总而言之,我想我的主要问题是:
如何确保仅恢复活动(即最新)事务?
我相信您必须处理收据并查看“原始购买日期和订阅到期日期”(https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions)。 html)收据中的每个购买,以查看特定购买是否仍然有效。您可以通过使用服务器并与 Apple 验证以获取收据的 JSON 来处理收据。或者,如果您使用的是 iOS7,则可以验证设备上的收据,并获取 JSON(例如,请参阅在 iOS 7 上本地验证应用内收据和捆绑收据的完整解决方案)。如果您使用的是 iOS7,您将拥有一张收据,其中包含通过以下方式获得的所有购买内容:
[[NSBundle mainBundle] appStoreReceiptURL]