iPhone商店套件:如何捕捉取消活动

时间:2009-11-23 08:55:09

标签: iphone storekit

这是我的问题:

当使用storekit进行应用程序内购买时,我正在显示一个“加载”视图,告诉用户在进程正在进行时等待几秒钟;但是让我们说同一个用户,当storekit向他询问他的itunes帐户密码时,按下“取消”按钮......我怎样才能“抓住”这个事件以隐藏加载视图?

因为用户的沟通非常重要,所以我担心这可能是苹果拒绝的原因。

感谢您的任何提示!

编辑:我不在这里做交易;我的第一步是恢复已完成的事务,以便通过此方法触发密码提示:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

2 个答案:

答案 0 :(得分:13)

Apple开发论坛报道了类似的内容。

What happens when user hits Cancel after asking to restore......

在他们的情况下,文档中的方法的复制和粘贴创建了一个明显编译而没有错误的错误。

// wrong, but compiles
- (void)paymentQueue:(SKPaymentQueue *)queuerestoreCompletedTransactionsFailedWithError:(NSError *)error

而不是

// correct
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error

如果您的观察者方法看起来像上面的第一个,那么您可能没有收到恢复操作的失败消息。

更新

SKPaymentTransactionObserver的SDK文档中,我看到了OS 3.1(2009-11-17)的恢复失败方法,但3.0文档(2009-05-01)似乎没有。自从3.1 doc以来,这个观察者方法“可以在iPhone OS 3.0及更高版本中使用”,这很奇怪。

可以肯定。我检查了我的iPhoneOS3.0.sdk / System / Library / Frameworks / StoreKit.framework / Headers / SKPaymentQueue.h的副本,以确保恢复失败观察者方法存在。 (它是。)

答案 1 :(得分:0)

如果用户点击取消按钮,则请求将失败 - 使用像这样的商店观察者......

MyStoreObserver *observer = [[MyStoreObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

并像这样处理....

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
            default:
                break;
        }
    }
}