2013-03-27 41 views
0

我已經在我的應用中實施了應用內購買,我有兩個關於它的問題。這是我的代碼使用方法:iOS應用內購買安全地恢復以前的清除

- (IBAction)buyProduct1:(id)sender { 
    SKPayment *payment = [SKPayment paymentWithProduct:product1]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

- (IBAction)restorePurchases:(id)sender { 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 

    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchasing: 

       break; 
      case SKPaymentTransactionStatePurchased: 

       //Can I be 100% sure that this method is only called when the product is bought? 
       [self product1Bought:transaction]; 

       break; 
      case SKPaymentTransactionStateRestored: 

       //What code should I have here to safely restore product1 if the product is bought? 

       break; 
      case SKPaymentTransactionStateFailed: 

       break; 
      default: 
       break; 
     } 
    } 
} 

- (void)product1Bought:(SKPaymentTransaction *)transaction { 
    NSString *string = @"Product1"; 
    [[NSUserDefaults standardUserDefaults] setObject:string forKey:@"Product1"]; 
    NSLog(@"Product1 is bought"); 
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
} 

1.I只是想知道如果我可以肯定100%,經過一個成功的收購,而不是如果有什麼奇怪的事情發生,並且產物是不是productBought方法只叫真的購買?

2.如何檢查product1是否先購買,以便我可以調用product1Bought方法?

回答

2
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

{

if ([queue.transactions count] == 0) 
{ 
    UIAlertView *restorealert = [[UIAlertView alloc] 
            initWithTitle:@"Restore" 
            message:@"There is no products purchased by you" 
            delegate:self 
            cancelButtonTitle:@"Ok" 
            otherButtonTitles:nil]; 

    [restorealert show]; 
    activityIndicator.hidden = YES; 


} 
else 
{ 
    NSString *productID; 



    for(SKPaymentTransaction *transaction in queue.transactions) 
    { 
    productID = transaction.payment.productIdentifier; 
     NSLog(@"the product identifier is %@",productID); 

}

在完成恢復後,您可以獲得您購買的productId

1

1)工作正常,數據將可在用戶購買它

2)爲早​​期購買的物品,你可以調用SKPaymentTransactionStateRestored下這個方法:

[self RestorePurchases]; 

-(void)RestorePurchases{ 
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
}