Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

transactionReceipt for in-app purchase is deprecated in iOS 7. What can I replace it with?

Tags:

In iOS 7, on the SKPaymentTransaction class, the property transactionReceipt:

// Only valid if state is SKPaymentTransactionStatePurchased.   @property(nonatomic, readonly) NSData *transactionReceipt 

…is deprecated. But, in my code, I created a InAppPurchase class, and in my method for controlling how is the method buying, I'm using the delegate method in my code and it's like:

- (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'             //                     //------------------------------------------//      }    }   } 

enter image description here

like image 891
user_Dennis_Mostajo Avatar asked Sep 19 '13 20:09

user_Dennis_Mostajo


2 Answers

You can get the receipt as the contents of the mainBundle's appStoreReceiptURL. You can find references: developer.apple.com

This is untested code, but off the top of my head, I'd say something along the lines of:

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

should get you the same result that transactionReceipt used to return.

like image 120
lodlock Avatar answered Sep 28 '22 13:09

lodlock


In case anyone maybe also confused about this problem (Maybe You also read an a little outdated tutorial like me...)

Please checkout WWDC 2014 Session 305 Preventing Unauthorized Purchases with Receipts. It covers both iOS & OS X, clear and comprehensive.

like image 34
hewigovens Avatar answered Sep 28 '22 13:09

hewigovens