2011-06-30 20 views
22

Pozdrowienia,SKProductsRequest - jak radzić sobie z błędami limitu czasu/połączenia?

Wygląda na to, że SKProductsRequest nie obsługuje w żaden sposób limitów czasu ani błędów połączenia. W przypadku powodzenia zadzwoni na numer -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response lub nie.

Chciałbym przedstawić moim użytkownikom jakiś wskaźnik aktywności podczas pobierania produktów lub może wyświetlić alert, jeśli nie można uzyskać dostępu do sklepu. Ponieważ (w przypadku awarii) nie ma informacji zwrotnej od SKProductsRequest jednak, zastanawiam się, do którego wydarzenia powinienem powiązać prezentację tego sprzężenia zwrotnego - inne niż oczekiwanie na arbitralny czas.

Pytanie brzmi: Czy istnieje znana ilość czasu, po którym można bezpiecznie założyć, że żądanie nie powiodło się? Czy istnieje jakiś sposób sprawdzenia statusu oczekującego żądania, którego właśnie nie widziałem?

Odpowiedz

44

biegnę to w moim projekcie za każdym razem, gdy SKRequest nie powiedzie (co obejmuje 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]; 
} 

działa wspaniale. Oczywiście możesz umieścić wszystko wewnątrz nawiasów, aby zastąpić mój alert, ale działa to dobrze dla użytkownika.

Mam nadzieję, że przyda ci się to.

Uwaga: Jest to SKRequestDelegate nie SKProductsRequestDelegate, który jest nieco mylące. Urządzenie SKRequestDelegate jest używane do zakupu i do zamówień produktów. Zestaw delegatów używający request.delegate może implementować metody dla obu.

+1

!!!!!! Nie mogę uwierzyć, że tego nie widziałem ... Sprawdzałem protokół SKProductDelegate jak sto razy, ponieważ myślałem, że MUSI to być program obsługi błędów ... Myślę, że nigdy wcześniej nie byłem tak ślepy. Niesamowite! Wielkie dzięki, koleś! – Toastor

+0

Ja też zupełnie tego nie zauważyłem w dokumentacji .. – Brynjar

+0

, ale ta metoda nie jest udokumentowana w SKProductsRequestDelegate Protocol Reference? Przynajmniej nie w http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequestDelegate/Reference/Reference.html –

2

Nie wierzę, że możesz zrobić coś innego niż czekać dowolnie długo. W niektórych moich aplikacjach czekam 30 sekund (pokazując jednocześnie widok aktywności modalnej), a następnie wyskoczę z ogólnym komunikatem o błędzie. Problem polega na tym, że w rzeczywistości 30 sekund jest poza zasięgiem większości użytkowników dla takich problemów, ale jeśli sprawisz, że będzie wystarczająco krótki, aby być użytecznym (powiedzmy 15 sekund), możesz w rzeczywistości zwolnić za wcześnie.

Nie sądzę, że jest lepsza opcja ... ale jestem gotów nauczyć się inaczej!

+0

Roger, przykro mi to odebrać, ale odpowiedź Samuelsa naprawdę jest dobra. Spójrz na to, myślę, że będziesz tak samo zaskoczony jak ja, głównie dlatego, że jest to tak oczywiste ... Jestem zdumiony, jak udało nam się to przeoczyć ... – Toastor

Powiązane problemy