我正在尝试为我的IAP实现恢复过程,但它似乎表现得很奇怪。我就是这样设置的:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
,然后调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
这不可能是正确的。它处理正确的恢复产品,但无需用户输入密码即可立即处理。如果登录提示不使用它来恢复购买,那么显示登录提示的目的是什么?
答案 0 :(得分:0)
您只想在初始化时调用[[SKPaymentQueue defaultQueue] addTransactionObserver:self]
一次。您可以拥有多个观察者,但Apple建议不要这样做。在调用之后,处理支付队列中的任何内容。
对于还原部分,只需创建一个调用方法的UIButton
即可在应用内购买类中进行还原。
//Button's action
-(void)restoreButtonTapped(UIButton *)button {
[yourInAppPurchasingClass restoreTransactions];
}
// located in your class that handles IAP
-(void)restoreTransactions {
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
成功还原的代理与购买相同,但如果失败则不会。因此,请务必实施- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
答案 1 :(得分:0)
您所看到的可能是早期购买或restoreCompletedTransactions(您为其输入密码)的交易。每次添加事务处理器时,旧事务都会在updatedTransactions中弹出,直到最后为每个事务执行finishTransaction:事务。