Your SlideShare is downloading. ×
  • Like
  • Save
Seoul GTUG 8 번째 이벤트 Chrome To Phone 모바일 서비스 사례를 통한 클라우드 애플리케이션 개발
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Seoul GTUG 8 번째 이벤트 Chrome To Phone 모바일 서비스 사례를 통한 클라우드 애플리케이션 개발

  • 1,433 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,433
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Google의ChrometoPhone모바일앱개발사례를통한안드로이드모바일클라우드서비스개발 이현남(@brian02k)
  • 2. KT,3분기영업이익‘주춤’…⋯5164억원전년⽐比12.5%↓ SKT,3Q영업익17%감소 LG유플러스,脫통신선언
  • 3. Chrome to Phone• PC 와 스마트폰 사이의 메시지를 손쉽게 공유할 수 있는 안드로이드 애플리케이션• Google크롬이설치된PC와스마트폰사이에링크,지도및현재선택한전 화번호와텍스트공유• Android2.2와Chrome6이상버전에서만ChrometoPhone지원 http://www.youtube.com/watch?v=SXWxU1xdl5Q
  • 4. Chrome to Phone• PC : 크롬 브라우져 및 Chome to Phone 확장 프로그램 설치• Android 폰 : 앱 설치• 개인 Google 계정 필요
  • 5. Chrome to Phone ! ! ! !
  • 6. Chrome to Phone ! !
  • 7. Polling , Push• Polling 주기적으로 서버 쪽에 새로운 데이터 있는지 확인, 서버 쪽 변 경 데이터 없더라도 네트웍 통신 함. 베터리 소모 많음 Push• 새로운 데이터 발생 시 서버쪽에서 모바일 디바이스로 알려 준 다. 데이터 변경이 지속적으로 일어나지 않으면 Push 는 좋은 솔루션이 될 수 있음
  • 8. Push 서비스 애플의푸시알림서비스(ApplePushNotification• APNs: service이하APNs)는iOS를지원하기위해구성돼있다.클 라우드서비스형태를가지고있으며,전세계아이폰iOS를 대상으로알림메시지를전달한다. 윈도우애저기반의클라우드서비스에서동작하는• MPNs: 푸시알림서비스이다. C2DM(CloudtoDeviceMessagingFramework)은안드로• C2DM: 이드에서PushService를하기위한클라우드서비스로안드로 이드2.2(프로요)를발표하면서제공됐다.
  • 9. C2DM CloudtoDevicemessing•간단한메시지전송•안드로이드시스템이메시지도착하면애플리케이션깨운다.•기존Google서비스연결사용함(Google계정필요)
  • 10. C2DM 흐름 5.등록ID + 메시지(ex:웹페이지URL) 6.메시지(ex:웹페이지URL) 전송4.메시지(ex:웹페이지URL) 2.등록ID 1.송신자ID(개발사이메일) + 애플리케이션ID 사용자이메일 3.등록ID + 사용자이메일
  • 11. 디바이스 등록 (1~3) !
  • 12. 디바이스 등록 (상세) !
  • 13. Android 디바이스 C2DM 등록[소스코regIndtent=:C2DMessaging.register메소드,Android->C2DM에등록요청]Intent 드(Android)newIntent("com.google.android.c2dm.intent.REGISTER"); regIndtent.putExtra("app",PendingIntent.getBroadcast(this,0,newIntent(),0));//애플리케이션ID,템플릿코드사용 regIndtent.putExtra("sender",“stp.chrome@gmail.com”);//개발사ID context.startService(regIndtent);//등록요청시작 !
  • 14. Android 디바이스 C2DM 등록[소스코드(Android)AndroidManifest.xml]<receiverandroid:name="com.google.android.c2dm.C2DMBroadcastReceiver"><!--등록ID수신--><intent-filter><actionandroid:name="com.google.android.c2dm.intent.REGISTRATION"/><categoryandroid:name="com.google.android.apps.chrometophone"/></intent-filter><!--메시지수신--><intent-filter><actionandroid:name="com.google.android.c2dm.intent.RECEIVE"/><categoryandroid:name="com.google.android.apps.chrometophone"/></intent-filter></receiver>
  • 15. Android 디바이스 C2DM 등록 [소스코드(Android)[C2DMBroadcastReceiver]publicvoidonReceive(Contextcontext,Intentintent){Stringreceiver=“com.google.android.c2dm.C2DMReceiver";intent.setClassName(context,receiver); !context.startService(intent);}
  • 16. Android 디바이스 C2DM 등록[소스코드(Android)[C2DMReceiver]final String deviceRegID = intent.getStringExtra("registration_id");C2DMessaging.setRegistrationId(context, deviceRegID); // 등록 ID Device에 저장String deviceId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("devregid", deviceRegID)); // 전송할 등록 IDparams.add(new BasicNameValuePair("deviceId", deviceId)); // 전송할 디바이스 IDparams.add(new BasicNameValuePair("deviceName", "Phone")); // 전송할 디바이스 명칭 !AppEngineClient client = new AppEngineClient(context,"brian02k@gmail.com"); // 개인 구글 계정HttpResponse res = client.makeRequest("/register", params);
  • 17. Android 디바이스 C2DM 등록[소스코드(AppEngine)[RegisterServlet]publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsIOException{RequestInforeqInfo=RequestInfo.processRequest(req,resp,getServletContext());//사용자인증확인및등록관련데이터를가져옴...//GoogleAppEngine데이터스토어에저장하기위한객체생성PersistenceManagerpm= String deviceId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);C2DMessaging.getPMF(getServletContext()).getPersistenceManager();...DeviceInfodevice=pm.getObjectById(DeviceInfo.class,key);device.setDeviceRegistrationID(reqInfo.deviceRegistrationID);//안드로이드디바이스등록IDdevice.setName(reqInfo.getParameter("deviceName"));//디바이스명칭...pm.makePersistent(device);//데이터스토어에안드로이드디바이스등록정보저장pm.close();}
  • 18. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송[크롬확장프로그램의두가지형태] ! ! 브라우져액션 페이지액션 !
  • 19. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송 크롬브라우져에서특정웹페이지가로드되었을때해당웹페이지URL정보를알아야,안드로이드폰으로해당정보를전송할수있다.이를해결하기위한것이contentscript이다.아래그림참조 ! !
  • 20. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송크롬확장프로그램의중요정보를가지고있는파일은JSON형식의manifest.json manifest.json {... "browser_action":{ "default_title":"__MSG_app_name__", "default_icon":"icon_19.png", ! "default_popup":"popup.html" }, ... "background_page":"background.html", "permissions":[ "contextMenus","tabs","http://*/*","https://*/*" ], "content_scripts":[ { "matches":["http://*/*","https://*/*"], "js":["content_script.js"] } ]} 확장프로그램이사용자가로드한웹페이지와커뮤니케이션하기위해,contentscript
  • 21. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송[메시지전송(크롬브라우져→안드로이드폰)관련흐름도] !
  • 22. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송 [소스코드#8(Extension):content_script.js]varpageInfo={"url":document.location.href,"title":document.title,"selection":window.getSelection().toString()};...chrome.extension.connect().postMessage(pageInfo);-content_script.js는웹페이지가크롬브라우져에로드될때호출.예를들어크롬브라우져에서http://seoul.gtugs.org웹페이지를로드했다면,pageInfo.url은http://seoul.gtugs.org가된다.-웹페이지URL정보를확장프로그램(popup.html)으로전달하기위해chrome.extension.connect().postMessage를이용하였다.그러면popup.html에서해당정보를전달받아안드로이드폰으로전송하는액션을수행하게된다.
  • 23. 크롬브라우져(PC)→ 안드로이드디바이스로메시지(URL)전송[소스코드#8(Extension):popup.html]chrome.extension.onConnect.addListener(function(port){ port.onMessage.addListener(function(info){varmsgType=(info.selection&&info.selection.length>0)?selection:page;sendToPhone(info.title,info.url,msgType,info.selection,sendToPhoneListener);});});물론메시지를전송하기전에인증과정(Google계정에로그인되어있어야한다)을거쳐야하며,OAuth를사용한다.관련내용은다음링크를참조.(http://code.google.com/chrome/extensions/tut_oauth.html)위의JavaScript소스에서sendToPhone는메시지(웹페이지URL)를3rdparty애플리케이션서버로전송하게된다.HTTPPOST방식으로요청하게되고데이터는아래와같은JSON형식으로전달한다 ●HTTP요청URL:https://chrometophone.appspot.com/send ●전송데이터(JSON):{"title":"Google","url":"http:// seoul.gtugs.org/","sel":"","type":"page","deviceType":"ac2dm","debug":"1","token":"277823439333588"}
  • 24. 3rdApp.Server(GoogleAppEngine)크롬확장프로그램의HTTP요청(https://chrometophone.appspot.com/send)을SendServlet이처리(web.xml)[소스코드(AppEngine):SendServlet의doPost메소드]publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsIOException{ resp.setContentType("text/plain"); ServletContextctx=getServletContext(); //요청정보를분석한다. RequestInforeqInfo=RequestInfo.processRequest(req,resp,ctx)); … //요청자이메일주소를가져온다. Stringusername=OAuthServiceFactory.getOAuthService().getCurrentUser().getEmail() … //요청자이메일주소를통해전송할디바이스정보를가져온다.PersistenceManagerpm=C2DMessaging.getPMF(ctx).getPersistenceManager();DeviceInfodeviceInfo=DeviceInfo.getDeviceInfoForUser(pm,username); ... //전송할메시지(웹페이지URL:http://seoul.gtugs.org)정보를가져온다. Stringurl=reqInfo.getParameter("url"); .. StringdeviceType=reqInfo.getParameter("deviceType"); ... //C2DM으로메시지를전송한다. C2DMessagingpush=C2DMessaging.get(getServletContext()); push.sendNoRetry(deviceInfo.getDeviceRegistrationID(),collapseKey,"url",url,"title",title,"sel",sel,"debug","1");
  • 25. C2DM->모바일디바이스메시지전송마지막으로,C2DM은수신받은메세지를,전달할안드로이드디바이스가활성화되어있으면메시지를전송안드로이드애플리케이션은수신받은메시지(브로드케스트로메시지전달)를처리하게된다.해당처리는C2DMReceiver클래스의onMessage메소드가하게된다. ! !
  • 26. 정리 •실제메시지전송량과는무관하게계속해서주기적으로메시지를전송하는톡서비스? •신뢰성있는연결,메시지가끊임없이전달되는서비스에선폴링방식이더효율 •하지만가끔씩메시지를송수신하는서비스라면,새로운데이터가발생하거나변경된것이존재할때서버쪽에서먼저모바일애플리케이션에해당사항을알려주는푸쉬(Push)메시지서비스가더합리적 •ChrometoPhone애플리케이션의모든구현은Google서비스기반 - 3rdparty애플리케이션서버는클라우드기반의GoogleAppEngine - PC에서스마트폰으로메시지를전송하기위한기능은크롬브라우져확장프로그램 - 모안드로이드야말할것도없고 - 푸쉬서비스를위한C2DM서버도물론Google에서제공 •인터넷에접속하는채널이다양해지고,클라우드기반의서비스가핵심경쟁력으로자리잡아가고있는요즘에,Google은관련서비스개발플랫폼을모두제공하고있다. •앞으로서비스발전방향이나기술트랜드를한발앞서알아가는데Google이제공하는서비스와개발플랫폼을학습해보면많은도움을얻을것이다.PhonetoGoogleChrome도나옴.한번사용해보시길.