일부 모바일 앱은 앱 자체가 네이티브 Android 개발을 사용하여 개발되지만 화면의 일부 또는 전부가 Android WebView 내에서 렌더링되는 하이브리드 앱으로 설계됩니다.이러한 앱 내에서 Mobile Engagement Android SDK를 계속 사용할 수 있으며, 해당 작업 방법이 이 자습서에 설명되어 있습니다.아래 샘플 코드는 Android 설명서( 여기)를 기반으로 합니다.Android 설명서에서는 하이브리드 앱의 Webview에서 Android SDK를 통해 파이프하는 동안 이벤트, 작업, 오류 및 앱 정보에 대한 추적 요청을 시작할 수 있도록 이 문서화된 접근 방식을 사용하여 Mobile Engagement Android SDK의 자주 사용되는 메서드에 대해 동일한 기능을 구현하는 방법을 설명합니다.
먼저 시작 자습서 에 따라 Mobile Engagement Android SDK를 하이브리드 앱에 통합해야 합니다.그러면 OnCreate 메서드가 다음과 같이 표시됩니다.
이제assets이라는 폴더의 프로젝트에서Sample.html이라는 파일을 만듭니다. Webview로 로드되는 이 브리지 파일에서 메서드를 호출합니다.
<!doctype html> <html> <head> <style type='text/css'> html { font-family:Helvetica; color:#222; } h1 { color:steelblue; font-size:22px; margin-top:16px; } h2 { color:grey; font-size:14px; margin-top:18px; margin-bottom:0px; } </style> <script type="text/javascript"> window.onerror = function(err) { log('window.onerror: ' + err); } send = function(inputId) { var input = document.getElementById(inputId); if(input) { var value = input.value; // Example of how extras info can be passed with the Engagement logs var extras = '{"CustomerId":"MS290011"}'; if(value && value.length > 0) { switch(inputId) { case "event": EngagementJs.sendEngagementEvent(value, extras); break; case "job": EngagementJs.startEngagementJob(value, extras); window.setTimeout( function() { EngagementJs.endEngagementJob(value); }, 10000 ); break; case "error": EngagementJs.sendEngagementError(value, extras); break; case "appInfo": EngagementJs.sendEngagementAppInfo({"customer_name":value}); break; } } } } </script> </head> <body> <h1>Bridge Tester</h1> <div id='engagement'> <h2>Event</h2> <input type="text" id="event" size="35"> <button onclick="send('event')">Send</button> <h2>Job</h2> <input type="text" id="job" size="35"> <button onclick="send('job')">Send</button> <h2>Error</h2> <input type="text" id="error" size="35"> <button onclick="send('error')">Send</button> <h2>AppInfo</h2> <input type="text" id="appInfo" size="35"> <button onclick="send('appInfo')">Send</button> </div> </body> </html>
위 HTML 파일에 대해 유의할 사항은 다음과 같습니다.
이 파일은 이벤트, 작업, 오류, 앱 정보의 이름으로 사용할 데이터를 제공할 수 있는 입력 상자 집합을 포함합니다.입력 상자 옆의 단추를 클릭하면 이 호출을 Mobile Engagement Android SDK로 전달하기 위해 브리지 파일에서 메서드를 호출하는 Javascript가 호출됩니다.
작업 방법을 보여 주기 위해 이벤트, 작업 및 오류의 몇 가지 정적 추가 정보에 대한 태그를 지정합니다.이 추가 정보는 JSON 문자열로 전송됩니다.WebAppInterface파일에서 구문 분석되어 AndroidBundle에 배치된 후 전송되는 이벤트, 작업 및 오류와 함께 전달됩니다.
Mobile Engagement 작업은 입력 상자에 지정한 이름으로 시작되며, 10초간 실행된 후 종료됩니다.
Mobile Engagement 앱 정보 또는 태그는 입력 상자에 태그 값으로 입력한 값 및 정적 키로 'customer_name'과 함께 전달됩니다.
앱을 실행하면 다음이 표시됩니다.이제 다음과 같은 테스트 이벤트의 이름을 제공하고 아래의Send를 클릭합니다.
이제 앱의모니터링탭으로 이동하면이벤트 -> 세부 정보아래에 전송한 정적 앱 정보와 함께 이 이벤트가 표시됩니다.
=================================
=================================
=================================
출처: http://hamait.tistory.com/370
이 글의 요약
- 로컬에 있는 웹 파일들을 불러와서 작업할때
웹뷰를 사용하는데 있어서 두드러지는 장점은 , 앱안에 필요한 웹 리소스들을 저장할수있다는것이다.
그것은 오프라인일때도 작업을 가능케 해주며, 로딩시간을 증진시킬것이다.
HTML, JavaScript, CSS 를 assets 디렉토리 (src/main/assets 등에 만듬)로부터 가져와보자.
주의: CSS 나 Javascript 를 참조할때 절대경로는 WebView 에서 작동하지 않는다. 다음과 같이 상대경로로 설정해야한다. ("/pages/somelink.html" -> "./pages/index.html" )
아래와 같이 로딩하자. ( 리모트에 있는 URL 을 읽어와서 작업하기 전에 전처리할것들을 이렇게 처리해도될듯)
OMTP의 BONDI, WAC, JIL 그리고 HTML5 까지..... HTML과 JavaScript를 이용한 WEB 기술 기반 개발 방안이 복잡해져가는 Client 개발의 새로운 방향으로 제시되고 있는 즈음... 별도의 웹플랫폼을 이용하지 않고, Web과 안드로이드 기술만을 이용한 하이브리드 어플을 개발해 보고자 한다.
7. browser.loadData(“<meta http-equiv=’Content-Type’ content=’text/html; charset=utf-8′ /><html><body>Hello, 마이크!</body></html>”, “text/html”, “utf-8″); 추가하여 실시간 데이터 입력
8. asset 폴더에 test.htm 파일을 작성하여 로컬에서 호출해서 쓰는법
<참고자료>
(1) HTTP URL 지정 방법
browser = (WebView) findViewById(R.id.webkit); browser.loadUrl(“http://m.naver.com“); browser.getSettings().setJavascriptEnabled(true); // 자바스크립트 사용 시 설정
위의 경우에 인터넷 권한을 매니페스트 파일에 등록하고도 에뮬레이터에서 연결이 안되는 경우에는 단말의 네트워크 설정을 확인해 보시기 바랍니다.
Settings > Wireless&Networks > Airplane Mode 가 선택되어 있거나 할 경우 에뮬레이터에서 3G 연결 등이 안될 수 있습니다. 이 설정이 문제가 없고 에뮬레이터 상단에 3G 아이콘이 보이고 PC 자체가 인터넷에 연결 가능하면 위의 코드로 페이지가 보일 것으로 예상됩니다.