Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SKProductsRequest - how to handle timeouts / connection errors?

Cheers,

It appears to me like SKProductsRequest does not handle timeouts or connection errors in any way. It either calls -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response on its delegate in case of success, or it doesn't.

I'd like to present my users with some kind of activity indicator while the products are being retrieved, or maybe pop up an alert if the appstore can't be reached. Since (in case of failure) there's no feedback from the SKProductsRequest however, I wonder to which event I should tie the presentation of that feedback - other then waiting for an arbitrary amount of time.

So, the question is: Is there a known amount of time after which it is safe to assume the request has failed? Or is there any way to check upon the status of a pending request that I just failed to see?

like image 711
Toastor Avatar asked Jun 30 '11 21:06

Toastor


2 Answers

I run this in my project for whenever an SKRequest fails (which includes 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];
}

Works a treat. Of course you can place anything inside the brackets to replace my alert, but this works well for the user.

Hope this is of use to you.

Note: This is in SKRequestDelegate not in SKProductsRequestDelegate, which is slightly confusing. The SKRequestDelegate is used for purchasing and for product requests. The delegate set using request.delegate can implement methods for both.

like image 107
Samuel Shelton Avatar answered Nov 20 '22 11:11

Samuel Shelton


I don't believe you can do anything other than wait an arbitrary amount of time. In some of my apps I wait 30 seconds (while showing a modal activity view) and then bail out with a generic error alert. The problem is, in reality 30 seconds is beyond most users' attention span for such issues, but if you make it short enough to be useful (say 15 seconds), you might actually bail too early.

I don't think there is a better option ... but I'm willing to learn otherwise!

like image 1
Roger Avatar answered Nov 20 '22 11:11

Roger