2012-02-24 2 views
2

UIWebView (웹 사이트에 연결된 앱)가 있습니다. 사용자가 웹 사이트를 탐색합니다. 그 후 사용자가 앱을 열고 연결이 없으면 이미 방문한 페이지에 액세스 할 수 있기를 바랍니다.iOS 앱에서 프록시 만들기

그래서 앱내에서 내부 프록시를 만들면 가능합니다. 각 요청은이 프록시에서 처리되며 결과는 UIWebView로 전송됩니다. 물론 프록시는 웹 페이지를 캐시해야하며 사용할 수있는 연결이없는 경우 캐시 된 페이지를 사용합니다.

미래에는 다른 기능 (예 : "다음 5 시간 동안 모든 사진을 캐시하고 싶습니다."등)을 설정할 수 있기 때문에 다른 방식 대신이 방식을 선호합니다 (HTML5 오프라인 캐시). ..

가능한지 알고 있습니까? 그렇다면 무엇을 사용해야합니까? 또는 ... 이미 비슷한 점이 있습니까 (Objective-C 프록시가 있습니까?)?

+0

간단한 구현을 위해보다 복잡한 구현을 작성하는 방법에 대한 설명과 함께 http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588을 참조하십시오. –

답변

0

가장 쉬운 방법은 HTTP 캐싱 메커니즘을 사용하는 것입니다. 웹 서버에 HTTP 헤더를 설정할 수 있습니까? 그렇다면 웹 사이트의 모든 그림 또는 기타 리소스에 최대 시간을 설정하여 최대 시간 동안 캐시에 보관할 수 있습니다.

UIWebView는 HTTP 헤더를 사용합니다.

가장 간단한 방법이지만 제한적입니다. iOS에서 설정 한 특정 캐시 크기 제한이 있습니다. 큰 리소스는 캐시되지 않거나 캐시에서 다른 리소스를 빠르게 차게 할 수 있습니다.

또 다른 방법은 NSURLRequest을 사용하여 리소스 요청을 보내고 NSURLRequestUseProtocolCachePolicy 플래그를 지정하는 것입니다. 웹 서버 캐싱을 존중할 수도 있고 그렇지 않을 수도 있습니다. 이 경우 iOS에서 캐싱을 처리합니다. 문제는 UIWebView에 프록시를 지정할 수 없다는 것입니다. 즉, 프록시에 대한 리디렉션을 직접 관리해야합니다. 웹 사이트 콘텐츠를 분석하고 이미지, CSS, 자바 스크립트 등의 내부 요청을 캡처해야합니다.

또 다른 방법은 요청과 캐싱을 모두 처리하는 것입니다. 그것은 분명히 가장 힘든 방법이지만, 당신은 당신의 손에 완전한 통제권을 가질 수 있습니다.

코드에 ASIWebPageRequest 또는 ProxyingUIWebView을 사용하거나 직접 구현 아이디어를 얻을 수 있습니다.