2011-06-30 28 views
22

Cheers,SKProductsRequest - cómo manejar los tiempos de espera/errores de conexión?

Me parece que SKProductsRequest no maneja los tiempos de espera ni los errores de conexión de ninguna manera. O llama al -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response en su delegado en caso de éxito o no.

Me gustaría presentar a mis usuarios algún tipo de indicador de actividad mientras se recuperan los productos, o tal vez mostrar una alerta si no se puede contactar con la tienda de aplicaciones. Dado que (en caso de falla) no hay comentarios de SKProductsRequest, sin embargo, me pregunto a qué evento debo vincular la presentación de esa retroalimentación, a excepción de esperar una cantidad arbitraria de tiempo.

Entonces, la pregunta es: ¿hay una cantidad conocida de tiempo después de la cual es seguro asumir que la solicitud ha fallado? ¿O hay alguna manera de verificar el estado de una solicitud pendiente que simplemente no pude ver?

Respuesta

44

corro esto en mi proyecto para cada vez que una falla SKRequest (que incluye 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]; 
} 

trabaja un convite. Por supuesto, puede colocar cualquier cosa dentro de los corchetes para reemplazar mi alerta, pero esto funciona bien para el usuario.

Espero que esto sea útil para usted.

Nota: Esto está en SKRequestDelegate no en SKProductsRequestDelegate, que es un poco confuso. El SKRequestDelegate se usa para compras y solicitudes de productos. El conjunto de delegados que usa request.delegate puede implementar métodos para ambos.

+1

!!!!!! No puedo creer que no haya visto esto ... Revisé el protocolo SKProductDelegate como cien veces porque pensé que DEBE haber un controlador de errores ... Supongo que nunca antes había sido así de ciego. ¡Increíble! Muchas gracias, amigo! – Toastor

+0

Yo también no lo noté completamente en los documentos ... – Brynjar

+0

pero este método no está documentado en la Referencia del protocolo SKProductsRequestDelegate? Al menos no en http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequestDelegate/Reference/Reference.html –

2

No creo que pueda hacer nada más que esperar un tiempo arbitrario. En algunas de mis aplicaciones, espero 30 segundos (mientras se muestra una vista de actividad modal) y luego rescato con una alerta de error genérica. El problema es que, en realidad, 30 segundos está más allá de la capacidad de atención de la mayoría de los usuarios para tales problemas, pero si lo haces lo suficientemente corto como para ser útil (digamos 15 segundos), en realidad podrías fianza demasiado pronto.

No creo que haya una mejor opción ... ¡pero estoy dispuesto a aprender lo contrario!

+0

Roger, lamento tomar esa aceptación lejos de ti, pero la respuesta de Samuels es realmente una buena decisión. Échale un vistazo, creo que estarás tan sorprendido como yo, principalmente porque es muy obvio ... Estoy sorprendido de cómo hemos logrado pasar esto por alto ... – Toastor

Cuestiones relacionadas