干杯,
在我看来,SKProductsRequest不会以任何方式处理超时或连接错误。如果成功,它可以在其代理上调用-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
,也可以不调用。{/ p>
我想在检索产品时向用户提供某种活动指示,或者如果无法访问appstore,则可能会弹出警报。由于(在发生故障的情况下)没有来自SKProductsRequest的反馈,但我想知道哪个事件我应该将该反馈的表示联系起来 - 除了等待任意的时间。
所以,问题是:是否有一段已知的时间,之后可以安全地假设请求失败了?或者有没有办法检查我刚看不到的待处理请求的状态?
答案 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秒),你实际上可能会过早保释。
我认为没有更好的选择......但我愿意另外学习!