본문 바로가기

IT/iOS

UIWebView에 Header정보 넣기

UIWebView의 url에 디바이스의 각종 정보를 세션으로 넣어서 사용했었는데
창을 띄우고 한참 있다 웹에서 작업을 다시 시작 하면
세션정보를 잃어 버리는 상황이 발생한다.
이를테면
댓글입력 웹창에서 댓글들을 계속 보다가~~~~~~~ 보다가 ~~ 댓글을 입력 하면 일정시간이 지나 url에 넣었던 정보를 잃어 버릴때가 있다.

그래서 직접 헤더로 정보를 넣는식으로 바꾸기로했다.

방법은

우선 UIWebViewDelegate를 이용
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
인스턴스 메서드 안에서 한다.

웹 로드를 하면 이 메서드가 호출이 된다.
그때

NSURL *url = [request mainDocumentURL]; if([[request allHTTPHeaderFields] objectForKey:@"헤더 이름"]!=nil) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // set the new headers [request addValue:[NSString stringWithFormat:@"각종 정보=%@",정보] forHTTPHeaderField:@"헤더 이름"]; // reload the request [_resultWebView loadRequest:request]; }); }); return NO; } return true;


코드 설명은 다음과 같다.
1. 현재 리퀘스트 되는 mainDocumentURL을 가져온다 그냥 url을 가져 오면 기본 url안의 세부 url까지 가져오기때문에 mainDocumentURL로 한다.
2. 만약 이 리퀘스트에 내가 지정할 헤더 이름이 있는지 없는지 판단
있다면 끝내고
없다면
8. 해당 리퀘스트에 헤더정보를 넣고
9. 이 리퀘스트를 다시 로드 한다.
이렇게 되면 헤더정보가 입력된 url이 다시 불러오게 되어 나중에 시간이 지나더라도 정보를 유실 하지않고 사용이 가능하다.