ブラウザアプリのAppStoreレビューでちょくちょく言及されているので調べてみました。
Undocumented APIを使用するので、審査に通るかは微妙です。
そもそもBASIC認証くらいなら、
http://user:password@www.example.com/
というURLでアクセスすれば認証できるので、使う人がこの形で登録しておけばいいだけのことだと思います。
さて、UIWebViewで認証が必要なページにアクセスした場合、次のデリゲート・メソッドが呼ばれます。
- (void)webView:(id)fp8 resource:(id)fp12 didReceiveAuthenticationChallenge:(id)fp16 fromDataSource:(id)fp20;
引数の型とかをきちんと書くとたぶん下記のようになります。
- (void)webView:(UIWebView *)webView resource:(NSObject *)resource didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)dataSource;
このメソッドの第3引数の認証チャレンジオブジェクト(NSURLAuthenticationChallenge)のsenderに、認証に必要な情報をセットして再試行します。
認証に失敗した場合は、再度このメソッドが呼ばれます。失敗の回数(previousFailureCount)はNSURLAuthenticationChallengeから取得できます。
- (void)webView:(id)webView resource:(id)resource didReceiveAuthenticationChallenge:(id)challenge fromDataSource:(id)dataSource { NSURLCredential *credential = [NSURLCredential credentialWithUser:@"user" password:@"password" persistence:NSURLCredentialPersistenceForSession]; [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; }
実際のアプリケーションでは、ここで認証情報を入力するダイアログを表示するなどして、認証情報を求めることになると思います。