25

在 iOS 7 中,在SKPaymentTransaction类中,属性transactionReceipt

// Only valid if state is SKPaymentTransactionStatePurchased.

 @property(nonatomic, readonly) NSData *transactionReceipt

…已弃用。但是,在我的代码中,我创建了一个 InAppPurchase 类,并且在我控制方法购买方式的方法中,我在我的代码中使用了委托方法,它就像:

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

for (SKPaymentTransaction *transaction in transactions) {

    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

                       // code and bla bla bla    
                          [self initPurchase];  
                          NSLog(@"PASO 1");          

            break;

        case SKPaymentTransactionStatePurchased:

                      // this is successfully purchased!
                            purchased = TRUE;
                            NSLog(@"PASO 2");
                           [self isPurchased];

                 NSLog(@"purchased %s", purchased? "true" : "false");

                     //  and return the transaction data

  if ([delegate respondsToSelector:@selector(successfulPurchase:restored:identifier:receipt:)])
  [delegate successfulPurchase:self restored:NO identifier:transaction.payment.productIdentifier receipt:transaction.transactionReceipt];

                     // and more code bla bla bla 

            break;

        case SKPaymentTransactionStateRestored:

                    // and more code bla bla bla 

                          [self restorePurchase];
                          NSLog(@"PASO 3");

            break;

        case SKPaymentTransactionStateFailed:

                    // and more code bla bla bla 

                           [self failedNotification];
                           NSLog(@"PASO 4");

            break;

                    //------------------------------------------//
                    //               THANKS GUYS                //
                    //          GRETTINGS FROM BOLIVIA          //
                    //             ROCK ON!!!! n_n'             //
                    //------------------------------------------//

    }
   }
  }

在此处输入图像描述

4

2 回答 2

27

您可以将收据作为 mainBundle 的 appStoreReceiptURL 的内容。您可以找到参考资料:developer.apple.com

这是未经测试的代码,但在我脑海中,我会说一些类似的话:

[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]

应该会得到与 transactionReceipt 过去返回的结果相同的结果。

于 2013-09-19T21:19:54.080 回答
2

万一有人也对这个问题感到困惑(也许你也像我一样读过一个有点过时的教程......)

请查看WWDC 2014 会议305 防止使用收据进行未经授权的购买。它涵盖了iOS和OS X,清晰而全面。

于 2014-11-04T02:04:53.863 回答