自动更新订阅和应用收据

我想知道当IAP自动更新订阅自动更新时,应用收据是否自动刷新。 文档意味着应用收据在进行购买(更新?)时更新,但是我在IAP沙盒中没有看到这种行为:

关于消耗品和不续订订阅的信息将在收据付款时添加到收据中,并保留在收据中,直到您完成交易。 交易完成后,下次更新收据时会删除此信息,例如,下次用户进行购买时。

有关所有其他types的购买信息将在付款时添加到收据中,并无限期地保留在收据中。

此外,文件声明:

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

对我来说,这意味着我可以监视已完成交易的SKPaymentQueue ,然后检查应用收据以查找它们的logging。 但是我没有在IAP沙盒中看到这一点。 在IAP沙盒中,我有一个自动更新订阅(每个用户/购买6次,正常的沙盒行为), 但发现更新我需要手动刷新应用收据

假设这一切都按我期待的方式工作,是否有在IAP沙箱中testing的最佳做法来触发此行为?

作为一个侧面说明,文件是不一致的采购types和他们在收据的坚持 – 见我对这个问题的答案。

当自动更新结束时,服务器端的收据更新 – 您可以通过调用服务器端validateReceipt方法来validateReceipt

更新:看到你正在使用RMStore,我嘲笑了一些东西,以便我可以看看的行为。

它看起来像客户端收据正在更新。 我的scheme:一个月的AR订阅(所以在沙箱中更新5分钟)。 我把一些诊断代码放在viewDidLoad

 RMAppReceipt *receipt = [RMAppReceipt bundleReceipt]; if (receipt != nil) { NSDateFormatter* localDateTime = [[NSDateFormatter alloc] init]; [localDateTime setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]]; [localDateTime setDateFormat:@"yyyy.MM.dd HH:mm:ss zzz"]; for (RMAppReceiptIAP* purchase in receipt.inAppPurchases) { NSString* cancellationDate = nil; if (purchase.cancellationDate) { cancellationDate = [localDateTime stringFromDate:purchase.cancellationDate]; } NSLog(@"Transaction: %@: product %@, original purchase date: %@, expiration date: %@, cancellation date: %@", purchase.originalTransactionIdentifier, purchase.productIdentifier, [localDateTime stringFromDate:purchase.originalPurchaseDate], [localDateTime stringFromDate:purchase.subscriptionExpirationDate], cancellationDate); } 

我还在RMStore的paymentQueue:updatedTransactions:中添加了一个断点paymentQueue:updatedTransactions:查看随后的AR购买是否更新队列。

然后我购买了我的testing产品的一个月,validation交易,然后退出申请。

在随后以5分钟的时间间隔重新调用应用程序后,我看到SKPaymentTransactionObserver方法中的断点被transactionSate SKPaymentTransactionStatePurchased命中。 日志显示了购买的连续增加(只显示最后的版本):

 2015-05-27 14:27:32.828 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:02:59 GMT-7, expiration date: 2015.05.27 14:07:58 GMT-7, cancellation date: (null) 2015-05-27 14:27:33.350 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:06:02 GMT-7, expiration date: 2015.05.27 14:12:58 GMT-7, cancellation date: (null) 2015-05-27 14:27:33.774 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:11:07 GMT-7, expiration date: 2015.05.27 14:17:58 GMT-7, cancellation date: (null) 2015-05-27 14:27:34.174 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:16:00 GMT-7, expiration date: 2015.05.27 14:22:58 GMT-7, cancellation date: (null) 2015-05-27 14:27:34.637 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:21:04 GMT-7, expiration date: 2015.05.27 14:27:58 GMT-7, cancellation date: (null) 2015-05-27 14:27:35.069 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:26:15 GMT-7, expiration date: 2015.05.27 14:32:58 GMT-7, cancellation date: (null) 

你可以使用这种诊断方法重现吗?