这是我的问题:
当使用storekit进行应用程序内购买时,我正在显示一个“加载”视图,告诉用户在进程正在进行时等待几秒钟;但是让我们说同一个用户,当storekit向他询问他的itunes帐户密码时,按下“取消”按钮......我怎样才能“抓住”这个事件以隐藏加载视图?
因为用户的沟通非常重要,所以我担心这可能是苹果拒绝的原因。
感谢您的任何提示!
编辑:我不在这里做交易;我的第一步是恢复已完成的事务,以便通过此方法触发密码提示:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
答案 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;
}
}
}