如果我需要添加一个事务观察器,并且我需要删除事务观察器以及所有这些是什么,我正在努力...
我继承的代码包括带有观察者的app委托...... AppDelegate - >
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
SKPaymentQueue *paymentQueue = [self.injector getInstance:[SKPaymentQueue class]];
[paymentQueue addTransactionObserver:self.purchaseHelper];
}
我正在处理购买助手的恢复部分...... PurchaseHelper - >
-(void) beginRestorePurchases:(BOOL)serverRestore {
self.serverRestore = serverRestore;
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
-(void) paymentQueueRestoreCompletedTransactionsFinished : (SKPaymentQueue *) queue {
for (SKPaymentTransaction *transaction in queue.transactions) {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
}
目前我关注的是恢复购买。 (我意识到我正在为代码的其他部分(购买部分)使用依赖注入模式,因此它不同。我不确定这是否也会对我的问题产生影响。)
问题在于我不知道是否应该添加另一个观察者来进行恢复。如果我这样做,我会在恢复时多次提示iTunes时出现一些奇怪的行为。在SO帖子中,我看到有人提到要删除观察者。如果我在app delegate级别创建它,你什么时候会这样做?
也许我的SKPaymentQueue * paymentQueue对象不是defaultQueue对象????不知道......
答案 0 :(得分:2)
您始终需要在应用生命周期的早期添加您的事务观察器。控制之外的操作可能导致事务无法完成,操作系统级别队列会将这些操作重新提供给您的应用程序。我无法想到任何移除观察者的常见合法理由。
你只需要一个观察者,那个观察者应该是处理所有IAP事件的看门人。
您还需要确保在每次合法完成的交易中都要完成。如果你不这样做,你可以最终堆叠大量重复的(从SKU角度来看)交易。