More Related Content Similar to Seoul GTUG 8 번째 이벤트 Chrome To Phone 모바일 서비스 사례를 통한 클라우드 애플리케이션 개발 (16) Seoul GTUG 8 번째 이벤트 Chrome To Phone 모바일 서비스 사례를 통한 클라우드 애플리케이션 개발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 계정 필요
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
+
사용자이메일
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);
ListNameValuePair params = new ArrayListNameValuePair();
params.add(new BasicNameValuePair(devregid, deviceRegID)); // 전송할 등록 ID
params.add(new BasicNameValuePair(deviceId, deviceId)); // 전송할 디바이스 ID
params.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)throws
IOException{
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);//안드
로이드디바이스등록ID
device.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.selectioninfo.selection.length0)?'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);
26. 정리
•실제메시지전송량과는무관하게계속해서주기적으로메시지를전송하는톡서비
스?
•신뢰성있는연결,메시지가끊임없이전달되는서비스에선폴링방식이더효
율
•하지만가끔씩메시지를송수신하는서비스라면,새로운데이터가발생하거나변경된것
이존재할때서버쪽에서먼저모바일애플리케이션에해당사항을알려주는푸쉬
(Push)메시지서비스가더합리적
•ChrometoPhone애플리케이션의모든구현은Google서비스기반
- 3rdparty애플리케이션서버는클라우드기반의GoogleAppEngine
- PC에서스마트폰으로메시지를전송하기위한기능은크롬브라우져확장프로그램
- 모안드로이드야말할것도없고
- 푸쉬서비스를위한C2DM서버도물론Google에서제공
•인터넷에접속하는채널이다양해지고,클라우드기반의서비스가핵심경쟁력으로자리
잡아가고있는요즘에,Google은관련서비스개발플랫폼을모두제공하고있다.
•앞으로서비스발전방향이나기술트랜드를한발앞서알아가는데Google이제공하는
서비스와개발플랫폼을학습해보면많은도움을얻을것이다.PhonetoGoogleChrome
도나옴.한번사용해보시길.