iOS';s SKPayment addTransactionObserver&;defaultqueue,这是怎么回事?

iOS';s SKPayment addTransactionObserver&;defaultqueue,这是怎么回事?,ios,objective-c,in-app-purchase,observers,Ios,Objective C,In App Purchase,Observers,如果我需要添加一个事务观察器,如果我需要删除事务观察器,以及在何处以及这一切是什么,我都在苦苦挣扎 我继承的代码包括带有观察员的应用程序代理。。。 AppDelegate-> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { SKPaymentQueue *paymentQueue = [self.injector

如果我需要添加一个事务观察器,如果我需要删除事务观察器,以及在何处以及这一切是什么,我都在苦苦挣扎

我继承的代码包括带有观察员的应用程序代理。。。 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帖子中,我看到一些关于删除观察员的内容。如果我在应用程序代理级别创建它,您什么时候会这样做


可能my SKPaymentQueue*paymentQueue对象不是defaultQueue对象????不知道……

您始终需要在应用程序生命周期的早期添加事务观察者。您无法控制的操作可能会导致事务无法完成,操作系统级别的队列将这些事务重新馈送到您的应用程序。我想不出任何共同的、合法的理由来除掉观察者

您只需要一个观察者,该观察者应该是处理所有IAP事件的看门人


您还需要确保对每个合法完成的事务调用finish。如果您不这样做,您可以将大量重复的交易(从SKU的角度来看)堆叠在彼此之上。

感谢您的回复,除了苹果的这一点之外,这大部分都是有意义的。他们为什么建议这样做链接到您的Apple源建议删除观察者?”清单2介绍了在应用程序即将终止时注册事务观察者实现AppDelegat//调用的最佳实践-(void)application willterminate:(UIApplication*)application{//删除观察者[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];}@endo,好的。尽管从技术上讲,这就是移除观察者,但这并不是一般意义上我所说的“移除观察者”。当观察者本身即将离开时,最好停止监听(不仅仅是IAP相关的),以避免任何消息被发送到无效的接收者。这是一种良好的内务管理,而不是“存在运行中的应用程序不应再侦听事务消息的情况”。