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