iOS收据不包括回购交易

时间:2015-04-20 13:11:33

标签: ios storekit

如果我擦除我的应用程序中的数据,然后重新购买我知道该帐户已经拥有的一些托管IAP,iOS会向我提供本机“您确定要重新购买此项目,您将不会被收费”对话框。这是预期的。

当购买退回到我的应用时,我会收到[[NSBundle mainBundle] appStoreReceiptURL]的收据。然后我尝试通过我的服务器验证SKPaymentTransaction的transactionIdentifier和收据。

然而,此IAP的收据的交易ID,因为我很久以前已经购买了它,与SKPaymentTransaction不同。

我该如何确认这是有效的回购?我可以以某种方式获得这次回购的签名收据吗?

3 个答案:

答案 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) {

    }];