如果我擦除我的应用程序中的数据,然后重新购买我知道该帐户已经拥有的一些托管IAP,iOS会向我提供本机“您确定要重新购买此项目,您将不会被收费”对话框。这是预期的。
当购买退回到我的应用时,我会收到[[NSBundle mainBundle] appStoreReceiptURL]
的收据。然后我尝试通过我的服务器验证SKPaymentTransaction的transactionIdentifier和收据。
然而,此IAP的收据的交易ID,因为我很久以前已经购买了它,与SKPaymentTransaction不同。
我该如何确认这是有效的回购?我可以以某种方式获得这次回购的签名收据吗?
答案 0 :(得分:3)
所有购买都将在一张收据中。您必须检查那里的所有iAP并查找所需的iAP。
如果您想要原始iAP交易的ID,则有原始交易标识符
对于恢复先前事务的事务,即原始事务的事务标识符。否则,与事务标识符相同。
有关收据字段的详细信息,请访问:https://developer.apple.com/library/prerelease/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html
无论如何,这是原始购买还是回购真的很重要吗?我对此的检查通常都是一样的。
答案 1 :(得分:2)
据我了解,您应该检查SKPaymentTransactionStateRestored
以检查这对[[NSBundle mainBundle] appStoreReceiptURL]
的交易是否有效。
{{1}}用于接收主应用程序,而不是IAP。
答案 2 :(得分:0)
您可以使用RMStore库,并检查所有购买内容:
RMStoreAppReceiptVerificator *verificator = [[RMStoreAppReceiptVerificator alloc] init];
if ([verificator verifyAppReceipt])
{
NSArray *inAppPurchases = [RMAppReceipt bundleReceipt].inAppPurchases;
for (RMAppReceiptIAP *inAppPurchase in inAppPurchases)
{
NSLog(@"productIdentifier %@ originalPurchaseDate %@", inAppPurchase.productIdentifier, inAppPurchase.originalPurchaseDate);
}
}
如果您的收据为零,您可以刷新收据:
[[RMStore defaultStore] refreshReceiptOnSuccess:^{
//get purchases
} failure:^(NSError *error) {
}];