2013-09-25 24 views
3

我要更新的iOS 7我的申請,我使用IAP,但Xcode的5給我這個這個錯誤:問題與transactionreceipt iOS中棄用7警告

transactionreceipt被棄用:在iOS的第一棄用7

這裏是我的代碼:

// saves a record of the transaction by storing the receipt to disk 
    - (void)recordTransaction:(SKPaymentTransaction *)transaction 
    { 
     if ([transaction.payment.productIdentifier isEqualToString:kProductIdentifier]) 
     { 
      // save the transaction receipt to disk 
      [[NSUserDefaults standardUserDefaults] setValue:transaction.transactionReceipt forKey:@"proUpgradeTransactionReceipt"]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
     } 
    } 

我怎樣才能解決這個問題?

//編輯:

我用我AndreyMan的答案,但什麼都沒有發生和編譯器給我APP:requestProductData END消息

- (void)requestProductData 
{ 
     [NSThread sleepForTimeInterval:2]; 

    NSLog(@"IN-APP:requestProductData"); 
    SKProductsRequest *request= [[SKProductsRequest alloc] 
           initWithProductIdentifiers: [NSSet setWithObject: @"com.compony.product"]]; 
    request.delegate = self; 
    [request start]; 

    NSLog(@"IN-APP:requestProductData END"); 


} 

,然後給了我這些消息:

2013-10-08 14:26:21.400 Arta[1138:60b] Purchasing... 2013-10-08 14:26:28.380 Arta[1138:60b] Unknown Reason. 2013-10-08 14:26:28.383 

Arta [1138:60b]購買faild ...

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       NSLog(@"Purchase compelete..."); 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       NSLog(@"Purchase faild..."); 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       NSLog(@"Restore compelete..."); 
       break; 
      case SKPaymentTransactionStatePurchasing: 
       NSLog(@"Purchasing..."); 
       break; 
      default: 
       break; 
     } 
    } 
} 




- (void)failedTransaction:(SKPaymentTransaction *)transaction 
{ 
    if (transaction.error.code != SKErrorPaymentCancelled) 
    { 
     // error! 
     [self finishTransaction:transaction wasSuccessful:NO]; 
     if (transaction.error.code == SKErrorClientInvalid) { 
     } 
     else if (transaction.error.code == SKErrorPaymentInvalid) { 

     } 
     else if (transaction.error.code == SKErrorPaymentNotAllowed) { 
     } 
     else if (transaction.error.code == SKErrorPaymentCancelled) { 
      // [self showAlert:@"In-App Purchase" withMessage:@"This device is not allowed to make the payment."]; 
      NSLog(@"User Cancellation."); 
     } 
     else { 
      // SKErrorUnknown 
      NSLog(@"Unknown Reason."); 
     } 
    } 
    else { 
     // this is fine, the user just cancelled, so don’t notify 
     [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
    } 
} 
+2

參見[收據驗證編程指南(https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/DOC/UID/TP40010573)。收據驗證在iOS 7中不同。 – rmaddy

+1

@rmaddy抱歉,我不明白!請給我一個樣品或東西? –

+1

轉到Apple開發人員論壇並搜索收據驗證。有大量的討論和代碼參考。 – rmaddy

回答

3

喜歡的東西:

NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL]; 
NSData *receipt; 
receipt = [NSData dataWithContentsOfURL:receiptUrl]; 
+0

謝謝,但沒有與App Store連接!你會請檢查我編輯的問題嗎? –