【问题标题】:iOS's SKPayment addTransactionObserver & defaultqueue, what is the story?iOS的SKPayment addTransactionObserver & defaultqueue,是什么故事?
【发布时间】:2015-05-31 05:17:47
【问题描述】:

如果我需要添加事务观察器,以及是否需要删除事务观察器,以及这一切在哪里和是什么,我都在苦苦挣扎......

我继承的代码包括带有观察者的应用委托... AppDelegate ->

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    SKPaymentQueue *paymentQueue = [self.injector getInstance:[SKPaymentQueue class]];
    [paymentQueue addTransactionObserver:self.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 帖子中,我看到一些提到删除观察者的内容。如果我在应用委托级别创建它,您什么​​时候会这样做?

也许我的SKPaymentQueue * paymentQueue 对象不是defaultQueue 对象????不知道……

【问题讨论】:

    标签: ios objective-c in-app-purchase observers


    【解决方案1】:

    您始终需要在应用生命周期的早期添加事务观察器。您无法控制的操作可能会导致事务无法完成,并且操作系统级别的队列会将这些重新提供给您的应用程序。我想不出任何常见的、正当的理由来移除观察者。

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

    您还需要确保在每个合法完成的交易上都调用了finish。如果不这样做,您最终可能会堆积大量重复的(从 SKU 角度来看)交易。

    【讨论】:

    • 感谢您的回复,这主要是有道理的,除了来自 Apple 的这一点。他们为什么推荐这个移除? - developer.apple.com/library/ios/technotes/tn2387/_index.html
    • 链接到您的 Apple 来源建议删除观察者?
    • "清单 2 遵循注册事务观察器实现 AppDelegat 的最佳实践" // 当应用程序即将终止时调用 - (void)applicationWillTerminate:(UIApplication *)application { // 移除观察器 [ [SKPaymentQueue defaultQueue] removeTransactionObserver:self]; } @end
    • 哦,好的。尽管从技术上讲,这就是移除观察者,但这并不是我所说的一般意义上的“移除观察者”。当观察者本身即将离开时停止侦听(不仅仅是与 IAP 相关)以避免将任何消息发送到无效接收器是最佳实践。这是一个很好的内务管理,而不是“存在 running 应用程序不应再侦听事务消息的情况”。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2014-09-10
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多