Top Banner
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
48

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

Nov 14, 2014

Download

Technology

2010 한국 자바 개발자 페스티벌
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 안드로이드 플랫폼기반의 푸시서버 아키텍처

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

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

발표 주제

Ar

Ar • 안드로이드 기반의 푸시 서버 기술안드로이드 기반의 푸시 서버 기술rtsze

nrtsze

n

– Android Based Push Server Technology

n Ja

vn Ja

vva C

va C

om

mom

mmunity

munityyy

2

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

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

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

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

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

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

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

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

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

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

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

모바일 디바이스의 네트워크 특성

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TLS 개요

Ar

Ar • 이 단계에서 키 교환과 인증에 사용할 암호화 방법, 메시지 인증

코드(MAC)가 결정된다

rtszen

rtszen

코드(MAC)가 결정된다.

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

vn Ja

v

• 키 교환과 인증 알고리즘은 공개 키 방법을 사용하거나, 사전에 공유된 키(TLS-PSK)를 사용할 수 도 있다.

va C

va C • 메시지 인증코드는 HMAC 해시 함수로 만든다.

– SSL에서는 비표준 무작위 함수를 사용한다.om

mom

mmunity

munityyy

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

안드로이드 개발 환경 구축

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

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

안드로이드 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

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

안드로이드 주요 개발 도구

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

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

안드로이드 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

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

안드로이드 응용프로그램 구조

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

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

안드로이드 응용프로그램의 수명 주기

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

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

안드로이드 응용프로그램의 수명 주기

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

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

안드로이드 프로젝트 구성

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

데모 시연

Ar

Arrtsze

nrtsze

nn Ja

vn Ja

vva C

va C

om

mom

mmunity

munityyy

48