2012년 2월 1일 수요일

Android App interaction with Web

Mobile Device Framework을 구상하고 있다. iSO와 Android 양쪽에서 공통으로 지원하는 기능 들을 정리하고 있는데 그 중에 Web <-> App 간 Interaction 기능을 기술 해보기로 한다.
연동 방식은 App의 Native Code와 Web의 Javascript와 통신하는 방식이다. 때문에 WebView가 javaScript을 실행할 수 있게 설정이 되어 있어야 한다.

WebView.getSettings().setJavaScriptEnable(true);

조금 더 상세히 설명해보기로 해보자.

App에서 Web으로
App에서 “WebView”의 loadUrl을 이용해서 직접적으로 현재 Web Page 내의 JavaScript을 호출한다. App에서 Web 연동은 오직 이 방법 한 가지다.

현재 보고 있는 WebPage에 “f_addProfile()”이라는 JavaScript가 있다고 하면 아래처럼 사용한다.

WebView.loadUrl(“javascript:f_addProfile(‘전달할 인자’)”);

Web에서 App으로
Web에서 App을 호출 하는 방법은 두 가지 방법을 생각 할 수 있겠다. 하나는 정론적인 방식이고 다른 하나는 편법이다.

정론적인 방법
1. App에서 JavaScript에서 호출될 Method을 만든다.
JavaScript과 연동되는 Class는  별도로 Inner Class로 만든다.

private class WebInteractionBridge {
   private final Handler handler = new Handler();   
   public void callMe(final String arg) { // must be final
       handler.post(new Runnable() {
           public void run() {
                // 실행 로직
           }
       });
   }
}

2. WebView에 JavaScript Interface WebInteractionBridge 등록해준다. 여기선 callApp 이라는 이름으로 등록해본다.

WebView.addJavascriptInterface(new WebInteractionBridge(),"callApp");

3. WebPage의 JavaScript에서 호출 해본다. callApp은 JavaScript Interface에 등록된 이름, callMe는 Method 이름이다.

window.callApp.callMe(‘전달 인자’);

편법
WebView에 “shouldOverrideUrlLoading(WebView, String)” Method가 있는데 이는 WebPage 내의 <a href=>로 걸려 있는 Link을 클릭할 때 발생하게 되는 Callback Method다. Link URL은 Method의 String 인자로 전달 받게 됩니다.

1. Custom Link Pattern을 만들어 봅니다.
<a href="toApp://profileAlbum?userid=inter999" >
   - toApp:// → App을 호출한다는 의미
   - profileAlbum → 무엇을 하기 원한다는 의미
   -userid=inter999 → App으로 전달하려는 Data의 {Key=Value} 문자열

2. shouldOverrideUrlLoading(WebView, String)을 Override 합니다.

@Override
public boolean shouldOverrideUrlLoading(WebView view, String u) {

   if (u.startsWith("toApp://profileAlbum")) {
       String param=u.substring(u.lastIndexOf("?")+1);
       userId = param.substring(param.lastIndexOf("=")+1);
       photoUtil.doTakeProfileAlbumAction(); --> 하고자 하는 일
       return true;
   }
   return false;
}

저는 편법을 많이 사용합니다. 이유는? iSO와 Android 모두에게 동일하게 사용되는 WebPage을 만들기에 적합하기 때문입니다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...