题
下面是我的问题:
当使用storekit用于应用内购买,我显示“加载”视图告诉用户要等待几秒钟,而过程正在进行中;但让我们说这个相同的用户,当storekit向他要itunes账号密码,按下“取消”按钮...我如何“捕获”这一事件,以隐藏加载看法?
恐怕这可能是因为用户的通信驳回苹果的原因是非常重要的。
感谢您的任何提示!
编辑:我不是在这里的交易;我的第一步是要恢复完成的事务,以便密码提示是触发通过该方法:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
解决方案
类似的东西被报道在苹果开发论坛。
在他们的情况下,复制和粘贴从创建的文档的方法的,如果没有错误显然编译的一个错误。
// 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 DOC指出这观察者方法是“可用于iPhone OS 3.0和更高”。
要得到肯定。我检查了我的iPhoneOS3.0.sdk /系统/资源库/框架/ StoreKit.framework /头/ SKPaymentQueue.h的副本,以确保恢复失败观测方法是存在的。 (这是)
其他提示
如果用户点击了取消按钮然后请求将失败 - 使用一个存储观察者像这样...
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;
}
}
}
不隶属于 StackOverflow