2015-11-24 21 views
2

用户购买物品后,通过输入电子邮件和密码并付款,方法updatedTransactions永远不会被调用。该项目是定期购买,但没有调用updatedTransactions方法我不能执行代码将项目添加到应用程序。我注意到这个项目是被购买的,因为如果我运行代码来恢复购买的项目,一切都会很好,产品会被安装到应用程序中。为什么updateTransactions从未调用过?

下面是我复制到购买该产品的代码:

-(IBAction)buyProduct:(id)sender { 

    NSLog(@"Purchasing: %@", self.product.productIdentifier); 

    SKPayment *payment = [SKPayment paymentWithProduct:self.product]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 

} 

下面的代码来恢复产品:

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

我注意到,在这最后的一段代码,我有以下line:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

我是否应该在购买零件中添加此行?

+0

退房苹果的StoreKitSuite样本:https://developer.apple.com/library/ios/samplecode/sc1991/简介/ Intro.html – Lefteris

回答

1

我通过在buyProduct方法添加以下代码解决了这个问题:

-(IBAction)buyProduct:(id)sender { 

    NSLog(@"Purchasing: %@", self.product.productIdentifier); 

    SKPayment *payment = [SKPayment paymentWithProduct:self.product]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; //added line 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 

} 

现在的方法是updatedTransactions在付款前和后付款调用。

用下面的代码,你可以检查,如果一切顺利的好坏:

for(SKPaymentTransaction *transaction in transactions) { 
     if (transaction.transactionState == SKPaymentTransactionStatePurchased) { 
      [self unlockRemoveiAD]; 
      [OKalertView show]; 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
     } 

     if (transaction.transactionState == SKPaymentTransactionStateFailed) { 
      [alertView show]; 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
     } 

    } 
+0

你应该尽快添加TransactionObserver,这是最好的地方是应用程序委托方法didFinishLaunchingWithOptions –

+0

@TimurSuleimanov如果我后来添加观察者,比如我的应用程序开始视频结束后该怎么办? – jayatubi

+0

@jayatubi然后有可能苹果会给你一个交易,但你不会收到它,因为你没有添加观察者,所以你不会处理用户的交易。它可以是自动更新的订阅交易,不确定,但可能,取消交易(当用户取消购买时)或恢复应用内购买交易。 –

相关问题