ݺߣ

ݺߣShare a Scribd company logo
Google의ChrometoPhone모바일앱개발사례를통한

안드로이드모바일클라우드서비스개발




                                          이현남(02)
,3분기영업이익‘주춤ęĦ⋯5164원전년⽐比12.5%↓


                              SKT,3Q영업익17%감소
                                                                               LG유플러스,脫통신선언
Chrome to Phone

• PC 와 스마트폰 사이의 메시지를 손쉽게 공유할 수 있는 안드로이드 애플리케이션
• Google크롬이설치된PC와스마트폰사이에링크,지도및현재선택한전
    화번호와텍스트공유
• Android2.2와Chrome6이상버전에서만ChrometoPhone지원


    http://www.youtube.com/watch?v=SXWxU1xdl5Q
Chrome to Phone

•   PC : 크롬 브라우져 및 Chome to Phone 확장 프로그램 설치

•   Android 폰 : 앱 설치

•   개인 Google 계정 필요
Chrome to Phone


      !




                  !


              !
          !
Chrome to Phone


       !




                  !
Polling , Push

•
  Polling 주기적으로 서버 쪽에 새로운 데이터 있는지 확인, 서버 쪽 변
    경 데이터 없더라도 네트웍 통신 함. 베터리 소모 많음


    Push
•           새로운 데이터 발생 시 서버쪽에서 모바일 디바이스로 알려 준
    다. 데이터 변경이 지속적으로 일어나지 않으면 Push 는 좋은 솔루션이 될 수 있음
Push 서비스
                            애플의푸시알림서비스(ApplePushNotification
•   APNs:   service이하APNs)는iOS를지원하기위해구성돼있다.클
                            라우드서비스형태를가지고있으며,전세계아이폰iOS를
                            대상으로알림메시지를전달한다.


                            윈도우애저기반의클라우드서비스에서동작하는
•   MPNs:   푸시알림서비스이다.



                            C2DM(CloudtoDeviceMessagingFramework)은안드로
•   C2DM: 이드에서PushService를하기위한클라우드서비스로안드로
                            이드2.2(프로요)를발표하면서제공됐다.
C2DM

   CloudtoDevicemessing

•간단한메시지전송
•안드로이드시스템이메시지도착하면애플리케이션깨운다.
•기존Google서비스연결사용함(Google계정필요)
C2DM 흐름
                                                                        5.등록ID
                                                                                   +
                                                            메시지(ex:웹페이지URL)


                                                                                                                                                     6.메시지(ex:웹페이지URL)
                                                                                                                                                                                    전송




4.메시지(ex:웹페이지URL)                                                     2.등록ID   1.송신자ID(개발사이메일)
                           +                                                                                                               애플리케이션ID
            사용자이메일                                              3.등록ID
                                                                                   +
                                                                       사용자이메일
디바이스 등록 (1~3)




                !
디바이스 등록 (상세)




               !
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);//등록요청시작
                                                                                                                                           !
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
Android 디바이스 C2DM 등록




 [소스코드(Android)[C2DMBroadcastReceiver]
publicvoidonReceive(Contextcontext,Intentintent){
Stringreceiver=“com.google.android.c2dm.C2DMReceiver;
intent.setClassName(context,receiver);                                   !
context.startService(intent);
}
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);
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();
}
크롬브라우져(ʰ)→
             안드로이드디바이스로메시지(URL)전송


[크롬확장프로그램의두가지형태]




                                     !                         !
        브라우져액션                     페이지액션




                                                           !
크롬브라우져(ʰ)→
            안드로이드디바이스로메시지(URL)전송

 크롬브라우져에서특정웹페이지가로드되었을때해당웹페이지URL정
보를알아야,안드로이드폰으로해당정보를전송할수있다.이를해결하기위
한것이contentscript이다.아래그림참조




                                            !
                                                                                                                    !
크롬브라우져(ʰ)→
                      안드로이드디바이스로메시지(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
크롬브라우져(ʰ)→
               안드로이드디바이스로메시지(URL)전송


[메시지전송(크롬브라우져→안드로이드폰)관련흐름도]




                                                                                      !
크롬브라우져(ʰ)→
                  안드로이드디바이스로메시지(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에서해당
정보를전달받아안드로이드폰으로전송하는액션을수행하게된다.
크롬브라우져(ʰ)→
                         안드로이드디바이스로메시지(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}
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);
C2DM-모바일디바이스메시지전송
마지막으로,

C2DM은수신받은메세지를,전달할안드로이드디바이스가활성화되어있으면메시지를
전송

안드로이드애플리케이션은수신받은메시지(브로드케스트로메시지전달)를처리하게된다.

해당처리는C2DMReceiver클래스의onMessage메소드가하게된다.




                                                       !




                                                                                                                       !
정리
 •실제메시지전송량과는무관하게계속해서주기적으로메시지를전송하는톡서비
스?

 •신뢰성있는연결,메시지가끊임없이전달되는서비스에선폴링방식이더효
율
 •하지만가끔씩메시지를송수신하는서비스라면,새로운데이터가발생하거나변경된것
이존재할때서버쪽에서먼저모바일애플리케이션에해당사항을알려주는푸쉬
(Push)메시지서비스가더합리적
 •ChrometoPhone애플리케이션의모든구현은Google서비스기반
 -    3rdparty애플리케이션서버는클라우드기반의GoogleAppEngine
 -    PC에서스마트폰으로메시지를전송하기위한기능은크롬브라우져확장프로그램
 -    모안드로이드야말할것도없고
 -    푸쉬서비스를위한C2DM서버도물론Google에서제공

 •인터넷에접속하는채널이다양해지고,클라우드기반의서비스가핵심경쟁력으로자리
잡아가고있는요즘에,Google은관련서비스개발플랫폼을모두제공하고있다.
 •앞으로서비스발전방향이나기술트랜드를한발앞서알아가는데Google이제공하는
서비스와개발플랫폼을학습해보면많은도움을얻을것이다.PhonetoGoogleChrome
도나옴.한번사용해보시길.

More Related Content

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

20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
Amazon Web Services Korea
Iris-iPNS / 푸시 솔루션 (Push Solution) 제품 소개
Iris-iPNS / 푸시 솔루션 (Push Solution)  제품 소개Iris-iPNS / 푸시 솔루션 (Push Solution)  제품 소개
Iris-iPNS / 푸시 솔루션 (Push Solution) 제품 소개
현용 황
모바일을 위한 (AWS) 클라우드 기술 동향
모바일을 위한 (AWS) 클라우드 기술 동향 모바일을 위한 (AWS) 클라우드 기술 동향
모바일을 위한 (AWS) 클라우드 기술 동향
AWSKRUG - AWS한국사용자모임
사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드
봉조 김
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
i2max
웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)
JoonHee Lee
리로그인 Relogin: 코드스테이츠 데모데이
리로그인 Relogin: 코드스테이츠 데모데이리로그인 Relogin: 코드스테이츠 데모데이
리로그인 Relogin: 코드스테이츠 데모데이
Code States 코드스테이츠
AI-IoT 연동을 위한 KT GiGA Genie Home Skills
AI-IoT 연동을 위한 KT GiGA Genie Home SkillsAI-IoT 연동을 위한 KT GiGA Genie Home Skills
AI-IoT 연동을 위한 KT GiGA Genie Home Skills
ksdc2019
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
KH Park (박경훈)
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
kosena
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
Amazon Web Services Korea
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
James (SeokHun) Hwang
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
Oma ds
Oma dsOma ds
Oma ds
chomki
Cms All 091103
Cms All 091103Cms All 091103
Cms All 091103
wiim
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Junghyun Park
20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
20150724 제10회 부산 모바일 포럼 - 모바일 및 IoT 환경을 위한 AWS 클라우드 플랫폼의 진화
Amazon Web Services Korea
Iris-iPNS / 푸시 솔루션 (Push Solution) 제품 소개
Iris-iPNS / 푸시 솔루션 (Push Solution)  제품 소개Iris-iPNS / 푸시 솔루션 (Push Solution)  제품 소개
Iris-iPNS / 푸시 솔루션 (Push Solution) 제품 소개
현용 황
사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드
봉조 김
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
i2max
웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)
JoonHee Lee
AI-IoT 연동을 위한 KT GiGA Genie Home Skills
AI-IoT 연동을 위한 KT GiGA Genie Home SkillsAI-IoT 연동을 위한 KT GiGA Genie Home Skills
AI-IoT 연동을 위한 KT GiGA Genie Home Skills
ksdc2019
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
KH Park (박경훈)
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
[코세나, kosena] 빅데이터 기반의 End-to-End APM과 비정형 데이터 분석 자료입니다.
kosena
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
스마트 프로덕트: 제조사를 위한 IoT 연결성 극대화 비즈니스 모델 및 사례 소개 – 정재연 AWS 인프라스트럭처 아키텍트, 장재영 경동나...
Amazon Web Services Korea
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
James (SeokHun) Hwang
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
Cms All 091103
Cms All 091103Cms All 091103
Cms All 091103
wiim
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Junghyun Park

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

  • 2. ,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 ! ! ! !
  • 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. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(URL)전송 [크롬확장프로그램의두가지형태] ! ! 브라우져액션 페이지액션 !
  • 19. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(URL)전송 크롬브라우져에서특정웹페이지가로드되었을때해당웹페이지URL정 보를알아야,안드로이드폰으로해당정보를전송할수있다.이를해결하기위 한것이contentscript이다.아래그림참조 ! !
  • 20. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(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. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(URL)전송 [메시지전송(크롬브라우져→안드로이드폰)관련흐름도] !
  • 22. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(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. 크롬브라우져(ʰ)→ 안드로이드디바이스로메시지(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 도나옴.한번사용해보시길.