2013-04-14 131 views
0

我正在爲iOS應用程序購買應用程序。蘋果已拒絕我的二進制文件不恢復購買的產品。在我的應用程序中,一旦用戶點擊產品圖標(如果項目被鎖定),他/她就會直接進入inApp購買流程,否則產品會變得開放。沒有可視的購買按鈕。現在蘋果說要提供恢復按鈕?有人可以告訴我如何處理這個問題嗎?我曾嘗試獲取購買產品清單,inApp購買iPhone

- (void) checkPurchasedItems 
{ 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
}// Call This Function 

//Then this delegate Function Will be fired 
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
    alreadyPurchasedItems = [[NSMutableArray alloc] init]; 

    NSLog(@"received restored transactions: %i", queue.transactions.count); 
    for (SKPaymentTransaction *transaction in queue.transactions) 
    { 
     NSString *ID = transaction.payment.productIdentifier; 
     [alreadyPurchasedItems addObject:ID]; 
    } 

} 

在應用程序啓動,但paymentQueueRestoreCompletedTransactionsFinished方法不會被調用,這樣我可以讓已經購買的物品的列表,然後直接通知用戶,如果他/她購買這個了。

回答

3

你如何設置[SKPaymentQueue defaultQueue]的代表?我猜你已經做SMT,如:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];後應導致下面的方法被解僱。所以此案SKPaymentTransactionStateRestored是你實現它:

-(void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction * transaction in transactions) { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased:     
       ... 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed:     
       ... 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored:     
       ... 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      default: 
       break; 
     } 
    }; 
} 

你可以看看這個教程,恢復更詳細朝着它的盡頭解釋。 http://www.raywenderlich.com/21081/introduction-to-in-app-purchases-in-ios-6-tutorial