4

这是我的问题:

当使用 storekit 进行应用内购买时,我正在显示一个“加载”视图,告诉用户在进程进行时等待几秒钟;但是假设这个用户,当 storekit 向他询问他的 iTunes 帐户密码时,按“取消”按钮......我如何“捕捉”这个事件以隐藏加载视图?

恐怕这可能是苹果拒绝的原因,因为用户的沟通非常重要。

感谢您的任何提示!

编辑:我在这里没有交易;我的第一步是恢复已完成的交易,因此通过此方法触发密码提示:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
4

2 回答 2

13

Apple 开发者论坛中也报道了类似的情况。

当用户在要求恢复后点击取消时会发生什么......

在他们的案例中,从文档中复制和粘贴方法会产生一个错误,该错误显然编译时没有错误。

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

代替

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

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

更新:

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

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

于 2009-11-24T17:23:48.353 回答
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;
        }
    }
}
于 2009-11-23T10:26:03.243 回答