如何拦截 StoreKit“购买对话框”以使 MBProgressHUD / UIProgressView 在正确的时间正确显示?

Posted

技术标签:

【中文标题】如何拦截 StoreKit“购买对话框”以使 MBProgressHUD / UIProgressView 在正确的时间正确显示?【英文标题】:How can I intercept the StoreKit "buy dialog" to make a MBProgressHUD / UIProgressView show up correctly and at the right times? 【发布时间】:2010-04-12 18:54:21 【问题描述】:

我正在将 StoreKit 编程到我的 iPhone 应用程序中。 在按下按钮购买商品之前或之后,我似乎无法拦截购买商品对话框的等待时间。 我几乎想要的是在购买对话框出现之前和之后,但在购买的物品被解锁之前屏幕上的一个指示器。 我不希望我的用户被挂在屏幕上,不知道他们的购买是否成功。

另外,如果我不显示商店,只显示一个可预测的项目,我是否需要 requestProductData?任何使等待时间尽可能短的方法都是好的。

最后一件事: 在 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 方法中,如果我在案例 SKPaymentTransactionStateFailed: 已完成的情况下显示 alertView,我会继续收到多个电话,即使购买完成一次。

谢谢!

请尽你所能提供帮助(只是想学习我的 iPhone 编程)。

【问题讨论】:

【参考方案1】:

关于处理缓慢期间的活动视图的第一个问题。

您可以在支付队列中截取“SKPaymentTransactionStatePurchasing 状态以建立一个带有活动指示器的警报视图。在您完成处理后关闭处于已购买、已恢复和失败状态的视图。StoreKit 生成的 AlertViews 将完成此操作一个消失并在整个过程中根据需要重新出现。

case SKPaymentTransactionStatePurchasing:
                purchaseActivityIndicator = [[UIAlertView alloc] initWithTitle:@"Processing purchase" message:@"Please wait..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil,nil];
                UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
                [activity setFrame:CGRectMake(121.0f, 80.0f, 36.0f, 36.0f)];
                [purchaseActivityIndicator addSubview:activity];
                [activity startAnimating];
                [activity release];
                [purchaseActivityIndicator show];
                [purchaseActivityIndicator release];
                break;

对于第二个问题,我在应用启动时开始加载我的商店商品,以便在用户到达商店时它们已准备就绪。由于它们是异步加载的,因此它们应该在用户进入商店视图时准备就绪。

最后一个问题不确定。

史蒂夫

【讨论】:

以上是关于如何拦截 StoreKit“购买对话框”以使 MBProgressHUD / UIProgressView 在正确的时间正确显示?的主要内容,如果未能解决你的问题,请参考以下文章

StoreKit - 如何获得正确的到期日期?

Storekit 框架

如何使用 AppStoreReceiptUrl 在 Xamarin.iOS 中验证 StoreKit 交易

我在哪里可以下载 StoreKit.framework

StoreKit 框架

使用 StoreKit 检测应用安装