2013-04-26 2 views
6

나는 요청서가 필요하다는 것을 미리 아는 경우 자격 증명을 제공하는 방법을 묻고 답하는 manyquestions을 보았습니다. UIWebView에서 인증 질문을 어떻게 감지합니까?

내가 인증 요청을 요구하는 사이트를로드

UIWebViewDelegate은 다음과 같은 콜백 수신 (HTTP 401 응답) : webView:shouldStartLoadWithRequest:navigationType: 때로는 webViewDidStartLoad: ( webViewDidStartLoad: 내가 사이트로 직접 이동하는 경우 호출 할 것을하고, 내가 리디렉션되면 호출되지 않는 것 같습니다). -[NSObject respondsToSelector:]를 재정 의하여

UIWebViewDelegate는 유용 할 수 uiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource: 일부 통화를 수신하지만, 물론 그 개인 API이며, 아마도 내 애플 리케이션을 거부 얻을 것이다.

UIWebView이 포함 된 몇 가지 주류 앱을 테스트했습니다. 지금까지는 Chrome에서만 이러한 인증 문제를 올바르게 처리합니다. 심지어 내 서버를 설정하고 크롬을 POST 번만 확인했습니다. 트위터와 Tweetbot은 내 화면처럼로드 화면을 영원히 보여주지 못합니다.

두 번째 투기 (NSURLConnection)를 사용하는 것 외에 다른 인증 문제를 감지하는 방법이 있습니까? POST 요청을 작성하면 POST이 두 배가됩니다.

I've added a radar to request an enhancement to UIWebView for this. 그것을 복제하십시오.

+0

레이더 요청을 작성해 주셔서 감사합니다. - 나는 그것을 속였습니다! –

답변

6

Apple now has sample code that solves this problem. 또한 NSURLProtocol을 올바르게 구현하는 방법에 대한 가장 완벽한 문서와도 같습니다.

+0

이 샘플 코드에 문제가 있습니다. NSURLConnections 중 하나가 콜백 수신을 중지합니다. 그러나 이것은 여전히 ​​최선의 선택 인 것으로 보인다. DTS를 TSI에 제출했으며, Apple이 문제를 해결할 수 있도록 도와 드리겠습니다. –

+1

'NSWRLConnection'을 사용하는 다른 NSURLProtocol이 있었기 때문에 내 문제가 발생했습니다. 이것은'UIWebView' 호출을 가로 채고있었습니다. Apple DTS와 대화를 한 후에,'NSWRLConnection' 기반의'NSURLProtocol'과'UIWebView'를 사용할 수없는 것처럼 들립니다. 애플의 샘플 코드는'NSURLSession'을 사용하므로 괜찮습니다. –

3

모든 요청을 자신의 NSURLConnection에로드 한 다음 데이터를 웹보기에 문자열로 제공 할 수 있습니다. 이렇게하면 모든 연결에서 연결을 가로 채고 여전히 네이티브 UIWebView 렌더링을 얻을 수 있습니다. 도착했을 때 데이터를 웹보기로 스트리밍하는 것이 잘 작동하는지 잘 모르겠습니다 만, 여기에 너무 많은 데이터가있는 것은 아닙니다.

+0

고마워요. 이것이 내가 지금하고있는 일이다. –

+0

나는 여기서 또는 트위터에 대해 듣고 싶습니다. 특히 HTML 문자열을 점진적으로로드하려고 시도하는 경우에 효과적입니다. –

+0

증분로드를 계획하지 않습니다. 내가 이것을 얻으면 나는 이것에 관해 blog에 시험해 볼 것이다. –

관련 문제