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

48
2010 JCO Festival Ar Ar r tszen r tszen 안드로이드 기반의 푸시 서버 기술 안드로이드 기반의 푸시 서버 기술 n Jav n Jav Android Based Push Server Technology Android Based Push Server Technology v a C v a C omm omm 아첸자바커뮤니티 아첸자바커뮤니티 munit y munit y 아첸자바커뮤니티 아첸자바커뮤니티 artszen java community artszen java community y 1

Upload: javacommunityorg

Post on 14-Nov-2014

27.132 views

Category:

Technology


10 download

DESCRIPTION

2010 한국 자바 개발자 페스티벌

TRANSCRIPT

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

데모 시연

Ar

Arrtsze

nrtsze

nn Ja

vn Ja

vva C

va C

om

mom

mmunity

munityyy

48