SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
Ar
Artszen Jav Comm
 r
 rtszen Jav Comm                    2010 JCO Festival



                            안드로이드 기반의 푸시 서버 기술
      n va
      n va




                            Android Based Push Server Technology
               munity
               munity




                                                   아첸자바커뮤니티
                                                   artszen java community
                                                           j
                    y
                    y




                        1
발표 주제

                         • 안드로이드 기반의 푸시 서버 기술
Ar
Ar
 rtszen Java Community
 rtszen Jav Comm


                             – Android Based Push Server Technology
      n v
      n va      munity
                m    y
                     y




                         2
Mobile Market Growth

                        • 모바일 시장의 성장
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • 네트워크 기술이 모바일 장비로 확대
      n va
      n va




                        • 일상 생활과 기업의 업무 환경에서 스마트 폰의 활용도가 높아짐
                        • 모바일 시장 확장에 따른 전문화된 개발 기술과 개발 인력 필요
                        • 스마트 폰의 많은 보급으로 C2B, C2C, B2B, C2C, C2G 등의 다
                          양한 비즈니스 모델의 변화
                        • 모바일 환경의 비즈니스 모델에 적용하기 쉬운 개방형 안드로이드
                          플랫폼
               munity
               munity




                        • 모바일 장비 활용 시 배터리의 사용 이슈를 고려한 푸시 기술
                    y
                    y
Mobile Phone Trend

                        • 모바일 폰 트랜드
Ar
Ar


                                                           iPhone
                                                           iPh
 rtszen Jav Community
 rtszen Jav Comm



                                                       BlackBerry
                                                                y
      n va
      n va




                                                          Android
               munity
               m




                                 출처 : www.google.com/trend
                                          g g
                    y
                    y




                        4
Mobile Phone SDK Trend

                        • 모바일 폰 개발 SDK 트랜드
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm



                                                     Android SDK
      n va
      n va




                                                      Objective C
               munity
               m




                                  출처 : www.google.com/trend
                                           g g
                    y
                    y




                        5
Mobile Phone Push Notification Trend

                        • 모바일 폰 Push Notification 트랜드
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm



                                                        iPhone Push
      n va
      n va




                                                       Android Push
               munity
               m




                                     출처 : www.google.com/trend
                                              g g
                    y
                    y




                        6
Java based Android Platform

                        • 자바 기반의 안드로이드 플랫폼
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • 기존 자바 개발자에게 새로운 모바일 환경의 개발 기술
      n va
      n va




                        • 모바일 환경에서 필요한 서버 개발 기술 필요




                                   Java         Android
               munity
               munity
                    y
                    y




                         7
모바일 디바이스의 네트워크 특성
                               Private Network
Ar
Ar

                                                                  과징 대상      SMS
                                                                            Server
 rtszen Jav Comm
 rtszen Jav Comm


                                                 Access
                                                  Point
                                                                            Server
                                                              Internet    Application
      n va
      n va




                                                                               s
                                                  Base
                        - 주소가 변경된다.              Station
                        - 내 IP 주소이다.
                          내부     이다
                        - 서버로서 사용할 수 없다.
                                                                            DBMSs




                                                           연결불가
               munity
               munity




                                       - 폴링 기술을 사용해야 한다.
                                       - 배터리 효율이 떨어진다.      *need push server
                                       - 데이터를 실시간으로 가져오는 부담이 증가한다.
                    y
                    y




                        8
APNs          (Apple Push Notification Service)                고찰
                             하나의 Provider가
Ar
Ar
 rtszen Java Comm
 rtszen Jav Comm


                             하나의 클라이언트 애플리케이션에게
                             Notification 푸시
      n v
      n va




                                                                                                       Client
                             Provider
                             P id       notification   APNs
                                                       APN    notification            notification   Application
                munity
                munity




                                                                             iPhone
                     y
                     y




                         9
APNs         (Apple Push Notification Service)   고찰
                         다중 Provider가
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                         다중 클라이언트 애플리케이션에게
                         Notification 푸시
      n va
      n va




                                          notification          notification
                             Provider A



                                                         APNs



                             Provider B
               munity
               munity
                    y
                    y




                        10
APNs    (Apple Push Notification Service)   고찰
                        • APNs 는 Apple iPhone의 Push Notification의 주요 기능
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • APNs 는 iPhone, iPad, iPod 과 같은 장비에게 정보를 전파하기위
                          한 매우 효율적인 서비스이다서비스이다.
      n va
      n va




                        • 각 장비들은 서비스와 인증되고 암호화된 IP 커넥션을 구축하고
                                         인증되고,            구축하고,
                          이 연결을 통해서 Notification을 전송 받는다.

                              APNs
                                              암호화된 채널 연결 (TLS)
               munity
               munity




                                                                      iPhone
                    y
                    y




                         11
APNs   (Apple Push Notification Service)   고찰
                        • Notification이 도착했을 때, 애플리케이션이 구동 중이 아니라면,
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                          장비는 사용자에게 애플리케이션을 대기중인 데이터를 가지고 있
                          음을 알린다.
      n va
      n va




                        • Provider는 암호화된 채널을 통해 APNs에 연결한다.

                         Provider
                                         암호화된 채널 연결 (TLS)
               munity
               munity




                                                                  APNs
                    y
                    y




                        12
APNs           (Apple Push Notification Service)   고찰
                        • APNs는 클라이언트 애플리케이션에게 줄 데이터가 들어오는지 모
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                          니터링한다.
                          니터링한다

                        • Provider가 보낸 새로운 데이터를 전송받고 애플리케이션에 대한
                                                전송받고,
      n va
      n va




                          새로운 데이터가 도착하면, APNs는 대상 장비에게 푸시한다.

                        • Notification은 token과 payload로 구성되는 2개의 조각으로 구성
                          된다.
                                                                         장비의 소재를 파악하기 위한 정보
                                                            token
               munity
               munity




                              Notification
                                                           payload
                                                                        실제 데이터 : Json 프로퍼티 목록
                    y
                    y




                         13
APNs   (Apple Push Notification Service)   고찰
                        • device token 은 전화번호와 유사한 것으로, APNs가 클라이언트
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm


                          애플리케이션이 설치된 장비의 소재를 파악하기 위한 정보를 포함
                          한다.
      n va
      n va




                        • payload는 장비 상의 애플리케이션 사용자에게 알리는 방식을 정
                          의한 Json 프로퍼티 목록이다.

                        • Notification 데이터의 흐름은 단 방향이다.
               munity
               m    y
                    y




                         14
APNs    (Apple Push Notification Service)   고찰
                        • Provider는 클라이언트 애플리케이션에 대한 device token과
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                          payload를 작성한다.
                          pa load를 작성한다

                        • 이를 APNs에게 전송하고 APNs는 장비에게 Notification을 푸시한
                                    전송하고,
      n va
      n va




                          다.


                         Provider                                        iPhone
                                    token
                                                          notification
                                  payload
               munity
               munity




                                                     APNs
                                                     APN
                    y
                    y




                        15
APNs   (Apple Push Notification Service)   고찰
                        • Provider는 APNs에게 자신을 인증하기 위해 topic을 준비한다
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • topic은 데이터를 제공할 애플리케이션을 구분할 때 사용된다.
      n va
      n va




                        • topic은 iPhone OS 상의 대상 애플리케이션의 identifier이다.


                              Provider
                                                        인증
                                           topic
               munity
               munity




                                            애플리케이션의 identifier


                                                                  APNs
                    y
                    y




                         16
Service to Device Connection Trust
                        • APNs는 TLS peer-to-peer 인증을 통해 장비와 연결한다.
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                              – iPh
                                iPhone OS가 연결 신뢰성에 대한 작업을 직접 다룬다
      n va
      n va




                                      APNs                                 Device

                                                   TLS initiation

                                                 Server certificate


                                                                                    Validate server certificate

                                                 Device certificate
               munity
               munity




                                             Validate device certificate
                                                  TLS established
                    y
                    y




                         17
TLS 개요
                        • TLS : Transport Layer Security
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • TLS는 암호 규약이다.
      n va
      n va




                        • TLS는 SSL이 표준화 되면서 바뀐 이름이다.

                        • TCP/IP 네트워크을 사용하는 통신에 적용된다.

                        • 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 보장한다.
               munity
               munity




                        • 웹 브라우징, 전자메일, 인스턴스 메시지, VoIP(Voice-over-IP) 같
                          은 응용부분에 적용되고 있다.
                    y
                    y
TLS 개요
                        • TLS는 IETF 표준 규약이다.
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                        • TLS는 클라이언트/서버 응용프로그램이 네트워크로 통신하는 과
                          정에서 도청/간섭/위조를 방지하기 위하여 설계되었다
                                                 설계되었다.
      n va
      n va




                        • TLS 의 3단계 기본 절차
                          – 1. 지원 가능한 알고리즘 상호 교환
                          – 2. 키 교환, 인증
                          – 3. 대칭 키 암호로 암호화하고, 메시지 인증
               munity
               munity




                        • 첫 단계에서 서버와 클라이언트는 암호 스위트를 교환한다
                                                    교환한다.
                    y
                    y
TLS 개요
                        • 이 단계에서 키 교환과 인증에 사용할 암호화 방법, 메시지 인증
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm


                          코드(MAC)가 결정된다
                                   결정된다.

                        • 키 교환과 인증 알고리즘은 공개 키 방법을 사용하거나 사전에 공
                                                     사용하거나,
      n va
      n va




                          유된 키(TLS-PSK)를 사용할 수 도 있다.

                        • 메시지 인증코드는 HMAC 해시 함수로 만든다.
                          – SSL에서는 비표준 무작위 함수를 사용한다.
               munity
               m    y
                    y
Provider to Service Connection Trust
                        • Provider와 Service 사이의 연결 역시 TLS peer-to-peer 인증을
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                          사용한다.
                          사용한다
      n va
      n va




                                   Provider                                 APNs

                                                    TLS initiation

                                                  Server certificate


                                              Validate server certificate

                                                 Provider certificate
               munity
               munity




                                                                                   Validate provider certificate
                                                   TLS established
                    y
                    y




                         21
Token 생성 및 분배
                        • iPhone 애플리케이션은 push notification을 받기 위해서 등록되어
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                          야 한다
                             한다.

                        • 애플리케이션은 장비에 설치된 후 위 방법을 사용한다
                                                  사용한다.
      n va
      n va




                        • iPhone OS는 애플리케이션으로부터 등록 요청을 받은 후 APNs
                                                          후,
                          에 연결하고, 이 요청을 포워딩한다.

                        • APNs는 유일한 device certificate 안에 포함되어 있는 정보를 사
                          용하여 device token을 생성한다.
               munity
               munity
                    y
                    y




                         22
Token 생성 및 분배
                        • device token은 device에 대한 고유 인증 값을 포함한다.
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm



                        • 다음 token key를 가지고 device token을 암호화하고, 이를 장비에
                          게 되돌려 준다준다.
      n va
      n va     munity
               m    y
                    y




                         23
Ar
Artszen Jav Comm
 r
 rtszen Jav Comm
      n va
      n va                                  Token 생성 및 분배



                             Provider           Device                         APNs

                                                         Connect(Token, ...)


                                                                                      Generate token package



                                                                                      Generate Device ID from
                                                                                      Device certificate
               munity
               munity




                                                                                      Encrypt token with token
                                                               Token                  key
                                        Token
                    y
                    y




                        24
Token 생성 및 분배
                        • 장비는 device token을 요청 애플리케이션에게 NSData 객체로 되
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm


                          돌려 보낸다
                             보낸다.

                        • 다음 애플리케이션은 device token을 바이너리 또는 헥사 포맷으
      n va
      n va




                          로 Provider에게 보낸다.
               munity
               m    y
                    y




                        25
Ar
Artszen Jav Comm
 r
 rtszen Jav Comm                     Device Token 분배

                                           1
                                                   SSL Connection

                                                                         APNs
                                                                         APN
      n va
      n va




                                                    device token


                             3                                      2


                                   device token




                               Client          4
                                                     device token       Provider
               munity
               munity




                             Application
                    y
                    y




                        26
Ar
Ar                                                     Android Architecture

                        Applications
                         pp
 rtszen Jav Comm
 rtszen Jav Comm


                                 Home                        Contacts                    Phone                       Browser                     ...


                        Application Framework

                                                                                                                                                               Java
                                                                                                                                                               J
      n va
      n va




                                          Activity Manager              Window Manager           Content Providers             View System

                          Package Manager            Telephony Manager             Resource Manager         Notification Manager        Location Manager



                        Libraries                                                                                                  Android Runtime              JNI
                                                                                                                                         Core Libraries
                           Surface Manager                       Media Framework                         SQLite

                                                                                                                                     Dalvik Virtual Machine
                              OpenGL | ES                               FreeType                         WebKit



                                                                                                                                                              C++/C
                                    SGL                                   SSL                              libc
               munity
               munity




                        Linux Kernel
                              Display Driver                       Camera Driver                   Flash Memory Driver                  Binder (IPC) Driver



                                                                                                                                                                 C
                              Keypad Driver                         WiFi Driver                        Audio Driver                    Power Management
                    y
                    y




                         27
안드로이드 개발 환경 구축
                             JDK 설치
Ar
Ar

                        •
 rtszen Jav Comm
 rtszen Jav Comm


                        •    Eclipse 설치
                        •    안드로이드 SDK 설치
                        •    환경변수 설정 : Path 에 안드로이드 SDK의 t l 디렉터리 추가
                                           P th                         tools
      n va
      n va




                        •    Eclipse용 ADT(Android Development Tools) 플러그인 설치 및 설정
                        •    디버깅을 위한 안드로이드 하드웨어 설정
                                 – 해당 안드로이드 기기에서 USB 연결을 통한 디버깅을 활성화 한다.
                                 – Settings > Applications > Development > USB debugging 활성화
                        • 안드로이드 장비 디버깅을 위한 운영체제 설정
                                 – 안드로이드 하드웨어에 안드로이드 응용프로그램을 설치하고 디버깅하기 위
               munity
               munity




                                   해 USB를 통해 운영체제가 안드로이드 장비에 연결할 수 있게 설정해야 한다
                                                                           한다.
                                 – 운영체제 마다 방법이 다름
                                 – 윈도우즈 : 안드로이드 USB 드라이버를 설치
                    y
                    y




                            28
Ar
Ar                                       안드로이드 SDK 주요 패키지

                                     패키지                            설명
 rtszen Jav Comm
 rtszen Jav Comm


                         andoird.*                 안드로이드 응용프로그램 기본 요소
                         com.google.android.maps   구글 지도 인터페이스
      n va
      n va




                         dalvik.*                  디버깅 등을 위한 Dalvik 가상 머신 지원
                         java.*                    코어 클래스, 네트워크, 보안 등의 일반 유틸리티
                         javax.*                   암호화 지원
                         junit.*                   단위 검사 지원
                         org.apache.http.
                         org apache http *         HTTP 프로토콜 지원
                         org.json                  Json 지원
               munity
               munity




                         org.w3c.dom               DOM 코어를 위한 W3C Java 바인딩
                         org.xml.sax.*             XML 지원을 위한 SAX
                         org.xmlpull.*             고성능 XML 파싱
                    y
                    y




                        29
안드로이드 주요 개발 도구
                        • 안드로이드 에뮬레이터
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                              – 안드로이드 가상머신으로 PC에서 실행되는 실제 장비와 흡사하게 작동
                              – 안드로이드 응용프로그램을 에뮬레이터에 설치, 실행/디버깅을 할 수 있음
                        • DDMS : Dalvik Debug Monitor Service
      n va
      n va




                              – 안드로이드 플러그인 (ADT)를 통해 Eclipse에 통합
                              – 안드로이드 기기에 직접 접근하여 실행 프로세스와 스레드 관리, Heap data
                                조회,
                                조회 프로세스를 디버거에 붙이는 다양한 작업 가능
                        • ADB : Android Debug Bridge
                              – 개발자가 Eclipse와 같은 표준 자바 IDE를 이용하여 에뮬레이터나 실제 장비
                                           p                 용              장
                                상의 안드로이드 코드를 디버깅할 수 있게 해주는 도구
                              – DDMS, Eclipse용 안드로이드 개발 플러그인 모두 ADB를 통해 장비와 상호
               munity
               munity




                                작용
                        • AHV : Android Hierarchy Viewer
                              – 레이아웃 구성 요소들의 관계를 보여주는 시각적 도구
                    y
                    y




                         30
안드로이드 AVD 생성
                        • AVD : Android Virtual Device (안드로이드 가상 장비)
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm


                        • 명령 행에서 생성
                              – 안드로이드 설치 디렉터리tools 로 이동
                              – android create avd -n myAvd2 1 -t 7 -c 1024M
                                                    n myAvd2.1 t     c
      n va
      n va




                        • Eclipse ADT 플러그인의 AVD Manager를 이용한 방법
               munity
               m    y
                    y




                         31
Ar
Artszen Jav Comm
 r
 rtszen Jav Comm                       안드로이드 응용프로그램 구조

                                                                             Activity         Main Activity : set in AndroidManifest.xml



                                                                             Activity
                                                                                    y
      n va
      n va




                                             Android
                                            Application                      Activity




                                                                             Service                Activity without UI



                             Activity transition          startActivity(new Intent(getApplicaitonContext(), Activity2.class);
               munity
               munity




                                Activity1                               Intent                                       Activity2
                    y
                    y




                        32
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm                 안드로이드 응용프로그램의 수명 주기

                        request start                            onCreate


                                        onRestoreInstanceState
      n va
      n va




                        foreground                         onStart

                                                                                                                              full
                                                   onResume                        background
                                                                                       g                                      lifetime

                                                                                                                   visible
                        delete from                                                                                lifetime
                         memory          onSaveInstanceState                              onRestart     active
                                                      background            foreground                  lifetime

                                                    onPause
                                                                                           foreground
               munity
               munity




                                                           onStop


                                                                 onDestroy
                    y
                    y




                        33
안드로이드 응용프로그램의 수명 주기
                        • onCreate()
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                              – A i i 가 시작되면 호출
                                Activity가
                              – Activity의 정적자원 초기화에 적합
                        • onResume()
      n va
      n va




                              – Activity가 ActivityStack의 최상위에 놓이고, 전경 프로세스가 되면 호출
                              – Activity의 실행에 필요한 자원 준비에 적합
                              – 오디오 동영상 시작에 적합한 곳
                                오디오,
                        • onPause()
                              – 다른 Activity가 ActivityStack 최상단에 놓이면 현 Activity는 백그라운드로
                                                                놓이면,
                                밀린다. 이 때 호출
                              – onResume()에서 시작한 자원의 비활성화해야한다
               munity
               munity




                        • onDestroy()
                            D t ()
                              – Activity가 종료되기 직전에 호출. (자발적 종료, 안드로이드가 종료)
                              – Activity의 정적 데이터 해제에 적합
                                       y의
                    y
                    y




                         34
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm                       안드로이드 프로젝트 구성

                                          AndroidManafest.xml
                                          AndroidManafest xml             응용프로그램의 전역 설정

                                           default.properties             빌드 대상과 적절한 빌드시스템 옵션 정의

                                                  src                     응용프로그램 소스
      n va
      n va




                             Android
                             Project                 xxx.xxx.Main.java

                                                  gen                     자원관리자 소스 : 수정 불가

                                                         xxx.xxx.R.java

                                                  res                     모든 자원 이미지 레이아웃 , 문자열 등
                                                                                이미지,

                                                   drawable                      icon.png
               munity
               munity




                                                        layout
                                                        l                       main.xml
                                                                                  i    l

                                                     values                     stirngs.xml
                    y
                    y




                        35
Ar
Ar                                  안드로이드 기반 푸시 아키텍처 구상

                                    Android Mobile Device                                                Push Server
 rtszen Jav Community
 rtszen Jav Comm


                                                                                                         Monitoring Module
                                         Push Notification Client Service
                                                                                                                        monitoring
                                               (Android Service)
      n va
      n va




                                                Network Module                       push notification
                                                                                                          Network Module
                        Android
                        Notifica
                         tion
                        Service



                                       notify
               munity
               m




                                      Android Push Client Application
                                        Android Push Client Application      HTTP, TCP/IP, ...
                         activate          Android Push Client Application                                Content Server
                    y
                    y




                         36
안드로이드 네트워크 프로그래밍 데모

                              안드로이드 네트워크 프로그래밍을 위한 구성
Ar
Ar

                        •
 rtszen Jav Comm
 rtszen Jav Comm


                                            Android Mobile Device
                                                                                                Push Server
                                                 Push Notification Client Service             Java Application
                                                                                                    pp
      n va
      n va




                                                  Network Module Thread
                                                                                           Network Module Thread
                              Android
                             Notification            Handler
                              Service                                                      Network Module Thread
                                                    notify

                                                 Android Push Client Application
                            activate
                                                      Activity

                                                                             update view
               munity
               munity




                                                          Handler


                                              Network Module Thread
                    y
                    y




                            37
안드로이드 네트워크 프로그래밍 데모

                        • 네트워크 서버 구성
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm



                             자바 클래스                        설명
      n va
      n va




                        PushSvr.java      네트워크 메인 애플리케이션

                        SManager.java     클라이언트 연결정보 관리를 위한 Vector 상속 클래스

                        ClientInfo.java   클라이언트 연결 정보
               munity
               m    y
                    y




                        38
안드로이드 네트워크 프로그래밍 데모
                        • SManager.java 구성 (extends Vector)
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                              구분             이름                        설명
      n va
      n va




                                   add(clientInfo)        클라이언트 정보 추가

                                   remove(clientInfo)     클라이언트 정보 삭제

                         메소드       findById(id)           ID 값에 해당하는 클라이언트 정보 반환

                                   findBySocket(socket)   소켓 값에 해당하는 클라이언트 정보 반환

                                   sendToDevice(id, message) ID 값을 가진 모든 소켓에 메시지 전송
               munity
               munity
                    y
                    y




                         39
안드로이드 네트워크 프로그래밍 데모
                        • PushSvr.java 구성
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                              구분               이름                         설명
      n va
      n va




                                   port: int                 서버의 리스닝 포트 번호 (8999)

                         프로퍼티 server: ServerSocket           서버용 소켓 객체

                                   socketManager: SManager   클라이언트 연결 정보
                                                             서버를 시작하는 작업 담당
                                   start()
                         메소드                                 클라이언트가 연결될 때 마다 쓰레드 생성
                                   main()                    메인 엔트리 메소드
                                   NetworkThread             네트워크 담당 쓰레드 클래스
               munity
               munity




                                       - socket                . 클라이언트 소켓
                         내부
                                       - reader                . 입력 스트림
                         클래스
                                       - writer                . 출력 스트림
                                       + run()                 . 쓰레드 시작 메소드
                    y
                    y




                         40
안드로이드 네트워크 프로그래밍 데모
                        • ClientInfo.java 구성
Ar
Ar
 rtszen Jav Community
 rtszen Jav Comm



                              구분                이름              설명
      n va
      n va




                                   socket: Socket    클라이언트 소켓
                         프로퍼티
                                   id: String        애플리케이션 키
               munity
               m    y
                    y




                         41
안드로이드 네트워크 프로그래밍 데모

                        • 안드로이드 애플리케이션 구성
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm



                                    액티비티                             설명
      n va
      n va




                                                     안드로이드 애플리케이션 메인 액티비티 클래
                        Main.java
                                                     스

                        MessageBox.java
                        MessageBox java              AlertDialog Wrapper 클래스
                        PushService.java             푸시 클라이언트 서비스

                                                     부팅 완료 브로드캐스팅을 받을 리시버 클래
                        StartupIntentReceiver.java
                                                     스

                        AndroidManifest.xml          전역 설정 xml 파일
               munity
               munity




                                                     안드로이드 애플리케이션 메인 레이아웃 xml
                        main.xml
                                                     파일
                    y
                    y




                        42
안드로이드 네트워크 프로그래밍 데모
                        • AndroidManifest.xml
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                         <?xml version="1.0" encoding="utf-8"?>
                         <manifest
      n va
      n va




                         xmlns:android="http://schemas.android.com/apk/res/a
                         ndroid"
                         p
                         package="org.artszen.pushclient"
                              g     g         p
                         android:versionCode="1"
                         android:versionName="1.0">
                           <application android:icon="@drawable/icon"
                                        android:icon @drawable/icon
                           android:label="@string/app_name">
               munity
               munity
                    y
                    y




                         43
안드로이드 네트워크 프로그래밍 데모
                        • AndroidManifest.xml
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                         <activity android:name=".Main"
                         android:label="@string/app_name">
      n va
      n va




                           <intent-filter>
                             <action android:name
                             ="android.intent.action.MAIN"/>
                             <category android:name
                             ="android.intent.category.LAUNCHER"/>
                           </intent filter>
                           </intent-filter>
                         </activity>
               munity
               munity
                    y
                    y




                         44
안드로이드 네트워크 프로그래밍 데모
                        • AndroidManifest.xml
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                         <receiver android:name="StartupIntentReceiver">
                           <intent-filter>
      n va
      n va




                             <action android:name
                             ="android.intent.action.BOOT_COMPLETED" />
                             <category android:name
                                  g y
                             ="android.intent.category.HOME" />
                           </intent-filter>
                         </receiver>
               munity
               munity
                    y
                    y




                         45
안드로이드 네트워크 프로그래밍 데모
                        • AndroidManifest.xml
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                           <service android:name="PushService">
                             <intent-filter>
      n va
      n va




                               <action android:name
                               ="org.artszen.pushclient.PushService" />
                             </intent-filter>
                           </service>
                         </application>

                         <uses-sdk android:minSdkVersion="7" />
               munity
               munity
                    y
                    y




                         46
안드로이드 네트워크 프로그래밍 데모
                        • AndroidManifest.xml
Ar
Ar
 rtszen Jav Comm
 rtszen Jav Comm


                              <uses-permission android:name
                              ="android.permission.INTERNET" />
      n va
      n va




                              <uses-permission android:name
                              ="android.permission.ACCESS_NETWORK_STATE" />
                              <uses-permission android:name
                                    p
                              ="android.permission.ACCESS_WIFI_STATE" />
                              <uses-permission android:name
                              ="android.permission.VIBRATE" />
                                android.permission.VIBRATE
                              <uses-permission android:name
                              ="android.permission.RECEIVE_BOOT_COMPLETED" />
               munity
               munity




                         </manifest>
                    y
                    y




                         47
데모 시연




                                 48
        Ar
        Artszen Java Community
         r
         rtszen Jav Comm
              n v
              n va      munity
                        m    y
                             y

Contenu connexe

Plus de JavaCommunity.Org

안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 APIJavaCommunity.Org
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드JavaCommunity.Org
 
Jetty Continuation - 이상민
Jetty Continuation - 이상민Jetty Continuation - 이상민
Jetty Continuation - 이상민JavaCommunity.Org
 
결합도 관점에서 본 VO 문제점
결합도 관점에서 본 VO 문제점결합도 관점에서 본 VO 문제점
결합도 관점에서 본 VO 문제점JavaCommunity.Org
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발JavaCommunity.Org
 

Plus de JavaCommunity.Org (7)

안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드
 
Jetty Continuation - 이상민
Jetty Continuation - 이상민Jetty Continuation - 이상민
Jetty Continuation - 이상민
 
결합도 관점에서 본 VO 문제점
결합도 관점에서 본 VO 문제점결합도 관점에서 본 VO 문제점
결합도 관점에서 본 VO 문제점
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발
 
스프링 3.0 & RESTful
스프링 3.0 & RESTful스프링 3.0 & RESTful
스프링 3.0 & RESTful
 
RESTful Java
RESTful JavaRESTful Java
RESTful Java
 

안드로이드 플랫폼기반의 푸시서버 아키텍처

  • 1. Ar Artszen Jav Comm r rtszen Jav Comm 2010 JCO Festival 안드로이드 기반의 푸시 서버 기술 n va n va Android Based Push Server Technology munity munity 아첸자바커뮤니티 artszen java community j y y 1
  • 2. 발표 주제 • 안드로이드 기반의 푸시 서버 기술 Ar Ar rtszen Java Community rtszen Jav Comm – Android Based Push Server Technology n v n va munity m y y 2
  • 3. Mobile Market Growth • 모바일 시장의 성장 Ar Ar rtszen Jav Comm rtszen Jav Comm • 네트워크 기술이 모바일 장비로 확대 n va n va • 일상 생활과 기업의 업무 환경에서 스마트 폰의 활용도가 높아짐 • 모바일 시장 확장에 따른 전문화된 개발 기술과 개발 인력 필요 • 스마트 폰의 많은 보급으로 C2B, C2C, B2B, C2C, C2G 등의 다 양한 비즈니스 모델의 변화 • 모바일 환경의 비즈니스 모델에 적용하기 쉬운 개방형 안드로이드 플랫폼 munity munity • 모바일 장비 활용 시 배터리의 사용 이슈를 고려한 푸시 기술 y y
  • 4. Mobile Phone Trend • 모바일 폰 트랜드 Ar Ar iPhone iPh rtszen Jav Community rtszen Jav Comm BlackBerry y n va n va Android munity m 출처 : www.google.com/trend g g y y 4
  • 5. Mobile Phone SDK Trend • 모바일 폰 개발 SDK 트랜드 Ar Ar rtszen Jav Community rtszen Jav Comm Android SDK n va n va Objective C munity m 출처 : www.google.com/trend g g y y 5
  • 6. Mobile Phone Push Notification Trend • 모바일 폰 Push Notification 트랜드 Ar Ar rtszen Jav Community rtszen Jav Comm iPhone Push n va n va Android Push munity m 출처 : www.google.com/trend g g y y 6
  • 7. Java based Android Platform • 자바 기반의 안드로이드 플랫폼 Ar Ar rtszen Jav Comm rtszen Jav Comm • 기존 자바 개발자에게 새로운 모바일 환경의 개발 기술 n va n va • 모바일 환경에서 필요한 서버 개발 기술 필요 Java Android munity munity y y 7
  • 8. 모바일 디바이스의 네트워크 특성 Private Network Ar Ar 과징 대상 SMS Server rtszen Jav Comm rtszen Jav Comm Access Point Server Internet Application n va n va s Base - 주소가 변경된다. Station - 내 IP 주소이다. 내부 이다 - 서버로서 사용할 수 없다. DBMSs 연결불가 munity munity - 폴링 기술을 사용해야 한다. - 배터리 효율이 떨어진다. *need push server - 데이터를 실시간으로 가져오는 부담이 증가한다. y y 8
  • 9. APNs (Apple Push Notification Service) 고찰 하나의 Provider가 Ar Ar rtszen Java Comm rtszen Jav Comm 하나의 클라이언트 애플리케이션에게 Notification 푸시 n v n va Client Provider P id notification APNs APN notification notification Application munity munity iPhone y y 9
  • 10. APNs (Apple Push Notification Service) 고찰 다중 Provider가 Ar Ar rtszen Jav Comm rtszen Jav Comm 다중 클라이언트 애플리케이션에게 Notification 푸시 n va n va notification notification Provider A APNs Provider B munity munity y y 10
  • 11. APNs (Apple Push Notification Service) 고찰 • APNs 는 Apple iPhone의 Push Notification의 주요 기능 Ar Ar rtszen Jav Comm rtszen Jav Comm • APNs 는 iPhone, iPad, iPod 과 같은 장비에게 정보를 전파하기위 한 매우 효율적인 서비스이다서비스이다. n va n va • 각 장비들은 서비스와 인증되고 암호화된 IP 커넥션을 구축하고 인증되고, 구축하고, 이 연결을 통해서 Notification을 전송 받는다. APNs 암호화된 채널 연결 (TLS) munity munity iPhone y y 11
  • 12. APNs (Apple Push Notification Service) 고찰 • Notification이 도착했을 때, 애플리케이션이 구동 중이 아니라면, Ar Ar rtszen Jav Comm rtszen Jav Comm 장비는 사용자에게 애플리케이션을 대기중인 데이터를 가지고 있 음을 알린다. n va n va • Provider는 암호화된 채널을 통해 APNs에 연결한다. Provider 암호화된 채널 연결 (TLS) munity munity APNs y y 12
  • 13. APNs (Apple Push Notification Service) 고찰 • APNs는 클라이언트 애플리케이션에게 줄 데이터가 들어오는지 모 Ar Ar rtszen Jav Comm rtszen Jav Comm 니터링한다. 니터링한다 • Provider가 보낸 새로운 데이터를 전송받고 애플리케이션에 대한 전송받고, n va n va 새로운 데이터가 도착하면, APNs는 대상 장비에게 푸시한다. • Notification은 token과 payload로 구성되는 2개의 조각으로 구성 된다. 장비의 소재를 파악하기 위한 정보 token munity munity Notification payload 실제 데이터 : Json 프로퍼티 목록 y y 13
  • 14. APNs (Apple Push Notification Service) 고찰 • device token 은 전화번호와 유사한 것으로, APNs가 클라이언트 Ar Ar rtszen Jav Community rtszen Jav Comm 애플리케이션이 설치된 장비의 소재를 파악하기 위한 정보를 포함 한다. n va n va • payload는 장비 상의 애플리케이션 사용자에게 알리는 방식을 정 의한 Json 프로퍼티 목록이다. • Notification 데이터의 흐름은 단 방향이다. munity m y y 14
  • 15. APNs (Apple Push Notification Service) 고찰 • Provider는 클라이언트 애플리케이션에 대한 device token과 Ar Ar rtszen Jav Comm rtszen Jav Comm payload를 작성한다. pa load를 작성한다 • 이를 APNs에게 전송하고 APNs는 장비에게 Notification을 푸시한 전송하고, n va n va 다. Provider iPhone token notification payload munity munity APNs APN y y 15
  • 16. APNs (Apple Push Notification Service) 고찰 • Provider는 APNs에게 자신을 인증하기 위해 topic을 준비한다 Ar Ar rtszen Jav Comm rtszen Jav Comm • topic은 데이터를 제공할 애플리케이션을 구분할 때 사용된다. n va n va • topic은 iPhone OS 상의 대상 애플리케이션의 identifier이다. Provider 인증 topic munity munity 애플리케이션의 identifier APNs y y 16
  • 17. Service to Device Connection Trust • APNs는 TLS peer-to-peer 인증을 통해 장비와 연결한다. Ar Ar rtszen Jav Comm rtszen Jav Comm – iPh iPhone OS가 연결 신뢰성에 대한 작업을 직접 다룬다 n va n va APNs Device TLS initiation Server certificate Validate server certificate Device certificate munity munity Validate device certificate TLS established y y 17
  • 18. TLS 개요 • TLS : Transport Layer Security Ar Ar rtszen Jav Comm rtszen Jav Comm • TLS는 암호 규약이다. n va n va • TLS는 SSL이 표준화 되면서 바뀐 이름이다. • TCP/IP 네트워크을 사용하는 통신에 적용된다. • 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 보장한다. munity munity • 웹 브라우징, 전자메일, 인스턴스 메시지, VoIP(Voice-over-IP) 같 은 응용부분에 적용되고 있다. y y
  • 19. TLS 개요 • TLS는 IETF 표준 규약이다. Ar Ar rtszen Jav Comm rtszen Jav Comm • TLS는 클라이언트/서버 응용프로그램이 네트워크로 통신하는 과 정에서 도청/간섭/위조를 방지하기 위하여 설계되었다 설계되었다. n va n va • TLS 의 3단계 기본 절차 – 1. 지원 가능한 알고리즘 상호 교환 – 2. 키 교환, 인증 – 3. 대칭 키 암호로 암호화하고, 메시지 인증 munity munity • 첫 단계에서 서버와 클라이언트는 암호 스위트를 교환한다 교환한다. y y
  • 20. TLS 개요 • 이 단계에서 키 교환과 인증에 사용할 암호화 방법, 메시지 인증 Ar Ar rtszen Jav Community rtszen Jav Comm 코드(MAC)가 결정된다 결정된다. • 키 교환과 인증 알고리즘은 공개 키 방법을 사용하거나 사전에 공 사용하거나, n va n va 유된 키(TLS-PSK)를 사용할 수 도 있다. • 메시지 인증코드는 HMAC 해시 함수로 만든다. – SSL에서는 비표준 무작위 함수를 사용한다. munity m y y
  • 21. Provider to Service Connection Trust • Provider와 Service 사이의 연결 역시 TLS peer-to-peer 인증을 Ar Ar rtszen Jav Comm rtszen Jav Comm 사용한다. 사용한다 n va n va Provider APNs TLS initiation Server certificate Validate server certificate Provider certificate munity munity Validate provider certificate TLS established y y 21
  • 22. Token 생성 및 분배 • iPhone 애플리케이션은 push notification을 받기 위해서 등록되어 Ar Ar rtszen Jav Comm rtszen Jav Comm 야 한다 한다. • 애플리케이션은 장비에 설치된 후 위 방법을 사용한다 사용한다. n va n va • iPhone OS는 애플리케이션으로부터 등록 요청을 받은 후 APNs 후, 에 연결하고, 이 요청을 포워딩한다. • APNs는 유일한 device certificate 안에 포함되어 있는 정보를 사 용하여 device token을 생성한다. munity munity y y 22
  • 23. Token 생성 및 분배 • device token은 device에 대한 고유 인증 값을 포함한다. Ar Ar rtszen Jav Community rtszen Jav Comm • 다음 token key를 가지고 device token을 암호화하고, 이를 장비에 게 되돌려 준다준다. n va n va munity m y y 23
  • 24. Ar Artszen Jav Comm r rtszen Jav Comm n va n va Token 생성 및 분배 Provider Device APNs Connect(Token, ...) Generate token package Generate Device ID from Device certificate munity munity Encrypt token with token Token key Token y y 24
  • 25. Token 생성 및 분배 • 장비는 device token을 요청 애플리케이션에게 NSData 객체로 되 Ar Ar rtszen Jav Community rtszen Jav Comm 돌려 보낸다 보낸다. • 다음 애플리케이션은 device token을 바이너리 또는 헥사 포맷으 n va n va 로 Provider에게 보낸다. munity m y y 25
  • 26. Ar Artszen Jav Comm r rtszen Jav Comm Device Token 분배 1 SSL Connection APNs APN n va n va device token 3 2 device token Client 4 device token Provider munity munity Application y y 26
  • 27. Ar Ar Android Architecture Applications pp rtszen Jav Comm rtszen Jav Comm Home Contacts Phone Browser ... Application Framework Java J n va n va Activity Manager Window Manager Content Providers View System Package Manager Telephony Manager Resource Manager Notification Manager Location Manager Libraries Android Runtime JNI Core Libraries Surface Manager Media Framework SQLite Dalvik Virtual Machine OpenGL | ES FreeType WebKit C++/C SGL SSL libc munity munity Linux Kernel Display Driver Camera Driver Flash Memory Driver Binder (IPC) Driver C Keypad Driver WiFi Driver Audio Driver Power Management y y 27
  • 28. 안드로이드 개발 환경 구축 JDK 설치 Ar Ar • rtszen Jav Comm rtszen Jav Comm • Eclipse 설치 • 안드로이드 SDK 설치 • 환경변수 설정 : Path 에 안드로이드 SDK의 t l 디렉터리 추가 P th tools n va n va • Eclipse용 ADT(Android Development Tools) 플러그인 설치 및 설정 • 디버깅을 위한 안드로이드 하드웨어 설정 – 해당 안드로이드 기기에서 USB 연결을 통한 디버깅을 활성화 한다. – Settings > Applications > Development > USB debugging 활성화 • 안드로이드 장비 디버깅을 위한 운영체제 설정 – 안드로이드 하드웨어에 안드로이드 응용프로그램을 설치하고 디버깅하기 위 munity munity 해 USB를 통해 운영체제가 안드로이드 장비에 연결할 수 있게 설정해야 한다 한다. – 운영체제 마다 방법이 다름 – 윈도우즈 : 안드로이드 USB 드라이버를 설치 y y 28
  • 29. Ar Ar 안드로이드 SDK 주요 패키지 패키지 설명 rtszen Jav Comm rtszen Jav Comm andoird.* 안드로이드 응용프로그램 기본 요소 com.google.android.maps 구글 지도 인터페이스 n va n va dalvik.* 디버깅 등을 위한 Dalvik 가상 머신 지원 java.* 코어 클래스, 네트워크, 보안 등의 일반 유틸리티 javax.* 암호화 지원 junit.* 단위 검사 지원 org.apache.http. org apache http * HTTP 프로토콜 지원 org.json Json 지원 munity munity org.w3c.dom DOM 코어를 위한 W3C Java 바인딩 org.xml.sax.* XML 지원을 위한 SAX org.xmlpull.* 고성능 XML 파싱 y y 29
  • 30. 안드로이드 주요 개발 도구 • 안드로이드 에뮬레이터 Ar Ar rtszen Jav Comm rtszen Jav Comm – 안드로이드 가상머신으로 PC에서 실행되는 실제 장비와 흡사하게 작동 – 안드로이드 응용프로그램을 에뮬레이터에 설치, 실행/디버깅을 할 수 있음 • DDMS : Dalvik Debug Monitor Service n va n va – 안드로이드 플러그인 (ADT)를 통해 Eclipse에 통합 – 안드로이드 기기에 직접 접근하여 실행 프로세스와 스레드 관리, Heap data 조회, 조회 프로세스를 디버거에 붙이는 다양한 작업 가능 • ADB : Android Debug Bridge – 개발자가 Eclipse와 같은 표준 자바 IDE를 이용하여 에뮬레이터나 실제 장비 p 용 장 상의 안드로이드 코드를 디버깅할 수 있게 해주는 도구 – DDMS, Eclipse용 안드로이드 개발 플러그인 모두 ADB를 통해 장비와 상호 munity munity 작용 • AHV : Android Hierarchy Viewer – 레이아웃 구성 요소들의 관계를 보여주는 시각적 도구 y y 30
  • 31. 안드로이드 AVD 생성 • AVD : Android Virtual Device (안드로이드 가상 장비) Ar Ar rtszen Jav Community rtszen Jav Comm • 명령 행에서 생성 – 안드로이드 설치 디렉터리tools 로 이동 – android create avd -n myAvd2 1 -t 7 -c 1024M n myAvd2.1 t c n va n va • Eclipse ADT 플러그인의 AVD Manager를 이용한 방법 munity m y y 31
  • 32. Ar Artszen Jav Comm r rtszen Jav Comm 안드로이드 응용프로그램 구조 Activity Main Activity : set in AndroidManifest.xml Activity y n va n va Android Application Activity Service Activity without UI Activity transition startActivity(new Intent(getApplicaitonContext(), Activity2.class); munity munity Activity1 Intent Activity2 y y 32
  • 33. Ar Ar rtszen Jav Comm rtszen Jav Comm 안드로이드 응용프로그램의 수명 주기 request start onCreate onRestoreInstanceState n va n va foreground onStart full onResume background g lifetime visible delete from lifetime memory onSaveInstanceState onRestart active background foreground lifetime onPause foreground munity munity onStop onDestroy y y 33
  • 34. 안드로이드 응용프로그램의 수명 주기 • onCreate() Ar Ar rtszen Jav Comm rtszen Jav Comm – A i i 가 시작되면 호출 Activity가 – Activity의 정적자원 초기화에 적합 • onResume() n va n va – Activity가 ActivityStack의 최상위에 놓이고, 전경 프로세스가 되면 호출 – Activity의 실행에 필요한 자원 준비에 적합 – 오디오 동영상 시작에 적합한 곳 오디오, • onPause() – 다른 Activity가 ActivityStack 최상단에 놓이면 현 Activity는 백그라운드로 놓이면, 밀린다. 이 때 호출 – onResume()에서 시작한 자원의 비활성화해야한다 munity munity • onDestroy() D t () – Activity가 종료되기 직전에 호출. (자발적 종료, 안드로이드가 종료) – Activity의 정적 데이터 해제에 적합 y의 y y 34
  • 35. Ar Ar rtszen Jav Comm rtszen Jav Comm 안드로이드 프로젝트 구성 AndroidManafest.xml AndroidManafest xml 응용프로그램의 전역 설정 default.properties 빌드 대상과 적절한 빌드시스템 옵션 정의 src 응용프로그램 소스 n va n va Android Project xxx.xxx.Main.java gen 자원관리자 소스 : 수정 불가 xxx.xxx.R.java res 모든 자원 이미지 레이아웃 , 문자열 등 이미지, drawable icon.png munity munity layout l main.xml i l values stirngs.xml y y 35
  • 36. Ar Ar 안드로이드 기반 푸시 아키텍처 구상 Android Mobile Device Push Server rtszen Jav Community rtszen Jav Comm Monitoring Module Push Notification Client Service monitoring (Android Service) n va n va Network Module push notification Network Module Android Notifica tion Service notify munity m Android Push Client Application Android Push Client Application HTTP, TCP/IP, ... activate Android Push Client Application Content Server y y 36
  • 37. 안드로이드 네트워크 프로그래밍 데모 안드로이드 네트워크 프로그래밍을 위한 구성 Ar Ar • rtszen Jav Comm rtszen Jav Comm Android Mobile Device Push Server Push Notification Client Service Java Application pp n va n va Network Module Thread Network Module Thread Android Notification Handler Service Network Module Thread notify Android Push Client Application activate Activity update view munity munity Handler Network Module Thread y y 37
  • 38. 안드로이드 네트워크 프로그래밍 데모 • 네트워크 서버 구성 Ar Ar rtszen Jav Community rtszen Jav Comm 자바 클래스 설명 n va n va PushSvr.java 네트워크 메인 애플리케이션 SManager.java 클라이언트 연결정보 관리를 위한 Vector 상속 클래스 ClientInfo.java 클라이언트 연결 정보 munity m y y 38
  • 39. 안드로이드 네트워크 프로그래밍 데모 • SManager.java 구성 (extends Vector) Ar Ar rtszen Jav Comm rtszen Jav Comm 구분 이름 설명 n va n va add(clientInfo) 클라이언트 정보 추가 remove(clientInfo) 클라이언트 정보 삭제 메소드 findById(id) ID 값에 해당하는 클라이언트 정보 반환 findBySocket(socket) 소켓 값에 해당하는 클라이언트 정보 반환 sendToDevice(id, message) ID 값을 가진 모든 소켓에 메시지 전송 munity munity y y 39
  • 40. 안드로이드 네트워크 프로그래밍 데모 • PushSvr.java 구성 Ar Ar rtszen Jav Comm rtszen Jav Comm 구분 이름 설명 n va n va port: int 서버의 리스닝 포트 번호 (8999) 프로퍼티 server: ServerSocket 서버용 소켓 객체 socketManager: SManager 클라이언트 연결 정보 서버를 시작하는 작업 담당 start() 메소드 클라이언트가 연결될 때 마다 쓰레드 생성 main() 메인 엔트리 메소드 NetworkThread 네트워크 담당 쓰레드 클래스 munity munity - socket . 클라이언트 소켓 내부 - reader . 입력 스트림 클래스 - writer . 출력 스트림 + run() . 쓰레드 시작 메소드 y y 40
  • 41. 안드로이드 네트워크 프로그래밍 데모 • ClientInfo.java 구성 Ar Ar rtszen Jav Community rtszen Jav Comm 구분 이름 설명 n va n va socket: Socket 클라이언트 소켓 프로퍼티 id: String 애플리케이션 키 munity m y y 41
  • 42. 안드로이드 네트워크 프로그래밍 데모 • 안드로이드 애플리케이션 구성 Ar Ar rtszen Jav Comm rtszen Jav Comm 액티비티 설명 n va n va 안드로이드 애플리케이션 메인 액티비티 클래 Main.java 스 MessageBox.java MessageBox java AlertDialog Wrapper 클래스 PushService.java 푸시 클라이언트 서비스 부팅 완료 브로드캐스팅을 받을 리시버 클래 StartupIntentReceiver.java 스 AndroidManifest.xml 전역 설정 xml 파일 munity munity 안드로이드 애플리케이션 메인 레이아웃 xml main.xml 파일 y y 42
  • 43. 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <?xml version="1.0" encoding="utf-8"?> <manifest n va n va xmlns:android="http://schemas.android.com/apk/res/a ndroid" p package="org.artszen.pushclient" g g p android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:icon @drawable/icon android:label="@string/app_name"> munity munity y y 43
  • 44. 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <activity android:name=".Main" android:label="@string/app_name"> n va n va <intent-filter> <action android:name ="android.intent.action.MAIN"/> <category android:name ="android.intent.category.LAUNCHER"/> </intent filter> </intent-filter> </activity> munity munity y y 44
  • 45. 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <receiver android:name="StartupIntentReceiver"> <intent-filter> n va n va <action android:name ="android.intent.action.BOOT_COMPLETED" /> <category android:name g y ="android.intent.category.HOME" /> </intent-filter> </receiver> munity munity y y 45
  • 46. 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <service android:name="PushService"> <intent-filter> n va n va <action android:name ="org.artszen.pushclient.PushService" /> </intent-filter> </service> </application> <uses-sdk android:minSdkVersion="7" /> munity munity y y 46
  • 47. 안드로이드 네트워크 프로그래밍 데모 • AndroidManifest.xml Ar Ar rtszen Jav Comm rtszen Jav Comm <uses-permission android:name ="android.permission.INTERNET" /> n va n va <uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name p ="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name ="android.permission.VIBRATE" /> android.permission.VIBRATE <uses-permission android:name ="android.permission.RECEIVE_BOOT_COMPLETED" /> munity munity </manifest> y y 47
  • 48. 데모 시연 48 Ar Artszen Java Community r rtszen Jav Comm n v n va munity m y y