2013-04-14 135 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