2016-09-20 5 views
5

Alamofire 4.0のRequestRetrierを使用して期限切れアクセストークンの要求の再試行を制御しています。私は文書hereに従っています。Alamofire 4.0 RequestRetrierは呼び出されていません(_、再試行、完了、完了)

私は、とRequestRetrierを実装するOAuth2Handlerのドキュメントで利用可能な例と非常に似た実装をしています。

私が遭遇する問題は、func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)が決して呼び出されないということです。 RequestAdapter実装のadaptメソッドが呼び出されます。

デバッグすると、エラーが発生したときにshould(_,retry,with,completion)が呼び出されますが、認証の問題に関連する返されたステータスコードはエラーを生成しないように見えるため、メソッドは呼び出されません。

ここに何か不足していますか?

答えて

11

エラーが発生していない可能性があります。 400応答はAlamofireによってエラーとみなされません。 400コードを受け取ったときにエラーが発生した場合は、validate()をチェーンしてください。 この場合は、hereという詳細情報があります。

+1

妥当性を確認してください!それは、感謝@crisisGriegaでした! –

8

正確にdocumentationの例に従えば、私のものは機能しませんでした。この例では、すでにvalidate()を使用していました。 Alamofire.SessionManager.defaultSessionManager()を交換した後、方法func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) が呼び出される、が

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

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

let sessionManager = Alamofire.SessionManager.default 
+0

これはなぜ起こっているのか分かりましたか、私は同じ問題を抱えています – Andrea

+0

@アンドレアいいえ私はありませんでした。 – Ashildr

+0

それを動作させるには、これも必要です。let sessionManager = Alamofire.SessionManager.default –

関連する問題