2016-09-20 7 views
5

Używam RequestRetrier Alamofire 4.0 do kontrolowania ponawiania próśb o token dostępu wygasłego. Postępuję zgodnie z dokumentacją here.Alamofire 4.0 RequestRetrier nie powinien być uruchamiany (_, spróbuj ponownie, z zakończeniem)

Mam bardzo podobną implementację do przykładu dostępnego w dokumentacji OAuth2Handler, która implementuje RequestAdapter i RequestRetrier.

Problem, który napotykam, polega na tym, że func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) nigdy nie jest wywoływany. Wprowadzono jednak metodę adapt implementacji.

Debugowanie, widzę, że SessionDelegate wywołuje tylko should(_,retry,with,completion), gdy wystąpi błąd, ale żąda, aby zwracać kody stanu związane z problemami autoryzacji, nie wydaje się generować błędów, więc ta metoda nigdy nie zostanie wywołana.

Czy tu czegoś brakuje?

Odpowiedz

11

Może nie dostaniesz błędu. 400 odpowiedzi nie jest uważanych za błędy przez Alamofire. Jeśli chcesz otrzymać błąd podczas odbierania kodu 400, powinieneś połączyć się z żądaniem z numerem validate(). Jeśli tak jest w Twoim przypadku, możesz znaleźć więcej informacji here.

+1

Zapomniałem sprawdzić poprawność! Tak było, dzięki @crisisGriega! –

8

Dokładnie według przykładu w kopalni documentation, kopalnia nie działała. Już używałem validate(), jak pokazano w przykładzie.

let sessionManager = SessionManager() 
sessionManager.adapter = oauthHandler 
sessionManager.retrier = oauthHandler 
let urlString = "\(baseURLString)/some/endpoint" 

sessionManager.request(urlString).validate().responseJSON { response in 
debugPrint(response) 
} 

Chociaż, po wymianie SessionManager() z Alamofire.SessionManager.default metoda func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) zostanie wywołany.

+0

Czy wiesz, dlaczego tak się dzieje, mam ten sam problem? – Andrea

+0

@Andrea Nie, nie mam. – Ashildr

+0

Potrzebne to również, aby to działało: let sessionManager = Alamofire.SessionManager.default –

Powiązane problemy