Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

Basic認証周り

didReceiveAuthenticationChallenge でchallenge.protectionSpace.authenticationMethodがNSURLAuthenticationMethodHTTPBasicなものが飛んでくる。

completionHandlerにNSURLCredentialでinitWithUserでユーザ名とパスワードを入れてNSURLCredentialPersistenceForSessionで呼んでやらないといけない。

問題はmainスレッドでやってくるのにcompletionHandlerを呼ばないでリターンしたと怒られるという矛盾した動きをするところ‥。

ずっとalertViewControllerでpresentViewControllerしてエラーでおこられていたが、

カスタムビューを作って、画面全体に貼り付けて認証画面を作った(presentViewControllerしない)らうまくいった。

ちなみに、completionHandlerは保持しておいて、認証画面を出そうとしているのにまだcompletionHandlerがよばれていないときはNSURLSessionAuthChallengePerformDefaultHandlingして解消してやるのが決めてだったのかもしれない。

ちなみにauthenticationMethodがそれ以外の場合はchallenge.protectionSpace.serverTrustのNSURLSessionAuthChallengeUseCredentialでcompleteしていた。 これも頻繁に飛んできた。

このあたりの動きが謎すぎて驚いた。