iOS收据不包括回购交易

iOS receipt does not include repurchased transaction

如果我擦除我的应用程序中的数据,然后重新购买一些我知道该帐户已经拥有的托管 IAP,iOS 会给我本机 "are you sure you wish to repurchase this item you will not be charged" 对话框。符合预期。

当购买 returns 到我的应用程序时,我收到带有 [[NSBundle mainBundle] appStoreReceiptURL] 的收据。然后我尝试通过我的服务器使用收据验证 SKPaymentTransaction 的 transactionIdentifier。

但是这个IAP的收据交易ID,因为我早就购买了,所以和SKPaymentTransaction不一样。

我应该如何验证这是一次有效的回购?我能以某种方式获得此回购的签名收据吗?

据我了解,您应该检查 originalTransaction 以检查这对 SKPaymentTransactionStateRestored.

的交易是否有效

[[NSBundle mainBundle] appStoreReceiptURL]是为了收到主申请,不是IAP。

您可以使用 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) {

    }];

所有购买都将在一张收据中。您必须在那里检查所有 iAP 并寻找需要的 iAP。

如果要原始iAP交易的id,有Original Transaction Identifier

For a transaction that restores a previous transaction, the transaction identifier of the original transaction. Otherwise, identical to the transaction identifier.

此处提供有关收据字段的更多信息:https://developer.apple.com/library/prerelease/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html

无论如何,这是原始购买还是回购真的很重要吗?我对此的检查通常是相同的。