使用Apple服务器验证耗材IAP的正确方法是什么?

dal*_*ijn 7 iphone in-app-purchase ios

从iOS7 Apple弃用了SKPaymentTransaction实例的transactionReceipt属性,现在我们有一个包含所有内容的大收据.在我的应用程序中,我有几个消耗品购买.我的代码:

#pragma mark -
#pragma mark SKPaymentTransactionObserver

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {

    for (SKPaymentTransaction *transaction in transactions) {

        switch (transaction.transactionState) {

            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;

           ...
    }

}

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
//    [self sendRecieptToServer:transaction.transactionReceipt]; // deprecated
    [self testMainReceipt];
    [self deliverPurchaseNotificationFirIdentifier:transaction.payment.productIdentifier];
    [SKPaymentQueue.defaultQueue finishTransaction:transaction];
}

- (void)testMainReceipt {
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];

    [self sendRecieptToServer:receipt]; //look at the 'status' field and determine whether a good purchase or not
}
Run Code Online (Sandbox Code Playgroud)

从Apple的回复中我看到'in_app'提交了一个数组,其中包含一个项目 - 我最近的购买,无论我之前购买了多少次.我认为消费品的购买方式如何?对于最近的购买,我总是会得到1个项目和"状态"字段的数组?还是有更好的方法?

小智 2

在此输入图像描述

您每次需要时都需要购买这些项目,并且无法再次免费下载它们。如果您删除并重新安装应用程序,或者在新设备上安装应用程序,您可能会丢失购买的消费品。例如,如果您在 iPod touch 上安装了一款在 iPhone 上开始玩的游戏,则游戏关卡会同步,但您在 iPhone 上购买的额外生命值或经验值不会同步。

消耗品可以是游戏币、额外生命值、额外经验值。

消耗品无法恢复,并且在收到后也会出现。

您可以找到更多详细信息链接。你也可以检查这个