2011-06-30 4 views
22

Cheers,SKProductsRequest - comment gérer les délais d'attente/les erreurs de connexion?

Il me semble que SKProductsRequest ne gère pas les délais d'attente ni les erreurs de connexion. Il appelle -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response sur son délégué en cas de succès, ou il ne l'appelle pas. Je souhaite présenter à mes utilisateurs une sorte d'indicateur d'activité pendant que les produits sont récupérés, ou peut-être afficher une alerte si l'appstore ne peut pas être atteinte. Depuis (en cas d'échec) il n'y a pas de retour d'information de la SKProductsRequest cependant, je me demande à quel événement je devrais lier la présentation de ce feedback - autre qu'attendre pendant un laps de temps arbitraire. Donc, la question est: Y a-t-il une durée connue après laquelle il est sûr de supposer que la demande a échoué? Ou y a-t-il un moyen de vérifier le statut d'une demande en attente que je n'ai pas vue?

Répondre

44

Je cours dans mon projet pour chaque fois qu'un SKRequest échoue (qui comprend 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]; 
} 

fonctionne un régal. Bien sûr, vous pouvez placer n'importe quoi à l'intérieur des parenthèses pour remplacer mon alerte, mais cela fonctionne bien pour l'utilisateur.

Espérons que cela vous soit utile.

Note: Ceci est en SKRequestDelegate pas SKProductsRequestDelegate, ce qui est un peu déroutant. Le SKRequestDelegate est utilisé pour l'achat et pour les demandes de produits. L'ensemble de délégués utilisant request.delegate peut implémenter des méthodes pour les deux.

+1

!!!!!! Je ne peux pas croire que je n'ai pas vu ça ... J'ai vérifié le protocole SKProductDelegate comme une centaine de fois parce que je pensais qu'il devait y avoir un gestionnaire d'erreur ... Je suppose que je n'ai jamais été aussi aveugle auparavant. Impressionnant! Merci beaucoup, mec! – Toastor

+0

J'ai aussi complètement échoué à remarquer cela dans les docs .. – Brynjar

+0

mais cette méthode n'est pas documentée dans SKProductsRequestDelegate Protocol Reference? Au moins pas dans http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequestDelegate/Reference/Reference.html –

2

Je ne crois pas que vous pouvez faire autre chose que d'attendre une quantité de temps arbitraire. Dans certaines de mes applications, j'attends 30 secondes (tout en affichant une vue d'activité modale), puis je sauve avec une alerte d'erreur générique. Le problème est que, en réalité, 30 secondes dépassent la capacité d'attention de la plupart des utilisateurs pour de tels problèmes, mais si vous le faites suffisamment court pour être utile (disons 15 secondes), vous risquez de renflouer trop tôt.

Je ne pense pas qu'il existe une meilleure option ... mais je suis prêt à apprendre autrement!

+0

Roger, je suis désolé de vous accepter, mais la réponse de Samuels est vraiment bonne. Jetez un coup d'oeil, je pense que vous serez aussi surpris que je suis, surtout parce que c'est si évident ... Je suis étonné de voir comment nous avons réussi à ignorer ce ... – Toastor

Questions connexes