소메뉴

메인메뉴

2017.10.23 Monday 옥창원은 살아있다

팁&테크


UIWebView와 APP간의 통신(communication

조회 수 361312 추천 수 0 2010.06.03 20:53:50
copyright www.irontop.com All rights reserved.

This Example show to you that communication with iPhone App, iPhone UIWebView each other
There is two ways for commucation.
One is the [webView:shouldStartLoadWithRequest:navigationType:] UIWebViewDelegate
The other is the [stringByEvaluatingJavaScriptFromString:] WebView

You can use "shouldStartLoadWithRequest" to commucate UIWebView 2 APP
You can use "stringByEvaluatingJavaScriptFromString" to commucate APP 2 UIWebView

유관업체에서 앱과 웹뷰간의 통신 예제를 작성해달라고 해서.
간단히 만들어 보았다.

웹뷰에는 자바스크립트의 머리를 깎아줄 수 있는 api를 제공하기 때문에(eval)
자바스크립트를 잘 이해하고 있다면, 팝업을 포함하여 거의 모든 기능을 훼이크로 구현이 가능하다.

아래는 주요 코드 부분이다.

APP에서 WebView로 값을 보내는 부분

 71 - (IBAction)toWeb:(id)sender {
 72     NSString *strScript = [NSString stringWithFormat:
 73                            @"var fromApp = document.getElementById('fromApp');\
 74                            fromApp.value = '%@';", self.txtToWebView.text];
 75     [webView stringByEvaluatingJavaScriptFromString:strScript];
 76 }


input 요소를 id로 찾아서 값을 세팅하는 자바스크립트를 생성한 후에
webView에 밀어 넣고 있다.

WebView로부터 APP로 보내지는 값을 획득하는 부분
 83 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
 84     
 85     NSString *strUrl = [[request URL] absoluteString];
 86     if ([strUrl hasPrefix:@"toAPP://"]) {
 87         NSString *strRequest = [[strUrl componentsSeparatedByString:@"://"] objectAtIndex:1];
 88         NSArray *arrRequest = [strRequest componentsSeparatedByString:@"?"];
 89         NSString *strCmd = [arrRequest objectAtIndex:0];
 90
 91         if (YES == [@"toAppCmd" isEqualToString:strCmd]) {
 92             // code to set Your Application communication
 93             self.txtFromWebView.text = [arrRequest objectAtIndex:1];
 94         }
 95         
 96         // toApp protocol do not StartLoad
 97         return NO;
 98     }
 99     
100     // other protocol do StartLoad
101     return YES;
102 }


form GET Action을 사용하였고,
action-url을 "toApp://toAppCmd?toApp=abc" 형식이 되도록 하였다.
즉, 로드할 url을 가로채서 "toAPP" 로 시작하는 경우에는 NO 를 리턴하여 실제로 로드되지 않도록 하고,
url을 파싱하여 toApp 의 값을 획득하도록 하였다.
여기서 strCmd 를 명령으로 사용하는 예제이므로 toAppCmd 를 다른 값으로 바꾸고,
구분하여 처리하는 것으로 처리할 종류(명령)을 구분할 수 있는 구조로 확장도 가능하다.

자세하는 것은 첨부된 예제 파일을 참조하자.~~


출처 : http://www.irontop.com/tag/%ED%86%B5%EC%8B%A0

List of Articles
번호 제목 글쓴이 날짜 조회 수
30 이클립스 PHP + SVN [1] [1622] Lepas 2012-02-22 169754
29 [HTML5] Server-Sent-Event(SSE) 사용하기 [1961] Lepas 2011-12-14 159788
28 스프링3 프레임워크 강좌 블로그 [3450] Lepas 2011-06-21 231680
27 자바 소켓 서버 base - example source [3407] Lepas 2010-12-30 297364
26 우분투에서 웹서버 환경 구축하기 (LAMP or APM) [1922] Lepas 2010-10-07 199021
25 유용한 css 선택자 [3141] Lepas 2010-09-08 269913
24 HTML5의 모든것 file [2269] Lepas 2010-09-03 169798
23 [모바일웹] 아이폰 사파리에서 화면회전시 폰트 확대 방지 image [2468] Lepas 2010-08-18 221245
22 float을 clear하는 4가지 방법. image [1776] Lepas 2010-08-13 166312
21 패킷 캡쳐 프로그램 Fiddler [2208] Lepas 2010-07-30 215901
20 소스 비교 분석 프로그램 WinMerge [1988] Lepas 2010-07-24 183273
» UIWebView와 APP간의 통신(communication [2919] Lepas 2010-06-03 361312
18 HTML5의 소개 및 지원되는 않는 브라우져에서의 사용법 (5 - Local Storage(like cookie), Web Worker(Thread)) [1922] Lepas 2010-06-02 172573
17 [HTML5] localStorage와 sessionStorage 그리고 클라이언트 DB [2439] Lepas 2010-06-02 202925
16 EditArea - Textarea 구문강조 [1965] Lepas 2010-03-12 178927
15 iPhone Web 제작용 iui [1953] Lepas 2010-02-11 188113
14 JQuery Library [2090] Lepas 2010-02-05 212367
13 jQuery 개발자를 위한 메모 - 레퍼런스 [3631] Lepas 2010-02-02 157963
12 jQuery 개발자를 위한 메모 - 기본·샘플 [1742] Lepas 2010-02-02 158446
11 The Objective-C Programming Language 한글 번역본 file [2974] Lepas 2010-01-24 205765