SKProductsRequest - 如何处理超时/连接错误?

时间:2011-06-30 21:17:37

标签: ios objective-c iphone in-app-purchase

干杯,

在我看来,SKProductsRequest不会以任何方式处理超时或连接错误。如果成功,它可以在其代理上调用-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response,也可以不调用。{/ p>

我想在检索产品时向用户提供某种活动指示,或者如果无法访问appstore,则可能会弹出警报。由于(在发生故障的情况下)没有来自SKProductsRequest的反馈,但我想知道哪个事件我应该将该反馈的表示联系起来 - 除了等待任意的时间。

所以,问题是:是否有一段已知的时间,之后可以安全地假设请求失败了?或者有没有办法检查我刚看不到的待处理请求的状态?

2 个答案:

答案 0 :(得分:52)

我在我的项目中运行此操作,以便在SKRequest失败时(包括SKProductRequest):

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
     alert = [[UIAlertView alloc] initWithTitle:@"In-App Store unavailable" message:@"The In-App Store is currently unavailable, please try again later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

     [alert show];
}

工作一种享受。当然,您可以在括号内放置任何内容来替换我的警报,但这对用户来说效果很好。

希望这对你有用。

注意:这是SKRequestDelegate而不是SKProductsRequestDelegate,这有点令人困惑。 SKRequestDelegate用于购买和产品请求。使用request.delegate设置的委托可以为两者实现方法。

答案 1 :(得分:1)

我不相信你可以做任何事情,而不是等待任意的时间。在我的一些应用程序中,我等待30秒(同时显示模态活动视图),然后使用一般错误警报进行拯救。问题是,实际上30秒超出了大多数用户对此类问题的关注范围,但如果你把它缩短到足够有用(例如15秒),你实际上可能会过早保释。

我认为没有更好的选择......但我愿意另外学习!