获取购买产品列表,inApp购买iPhone

我正在为我的iOS应用程序购买应用程序。 苹果已经拒绝我的二进制文件不恢复购买的产品。 在我的应用程序中,一旦用户点击产品图标(如果项目被locking),他/她就会直接进入inApp购买stream程,否则产品会被打开。 没有可视的购买button。 现在苹果说要提供恢复button? 有人可以告诉我如何处理这个? 我努力了

- (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方法永远不会被调用,以便我可以得到已经购买的物品清单,然后直接通知用户,如果他/她已经购买了。

你如何设置[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