2010년 공개 SW 개발자대회 Android Push Notification System 2010-10-23 XPN 노세홖
목차 1. 프로젝트 개요 2. 주요 관련 기술 3. 시스템 구성 4. 프로젝트 구성 5. 프로젝트 개발 6. 프로그램 실행 화면 7. 개발 홖경 8. 향후 발전 방향 9. 데모 2
1. 프로젝트 개요 프로그램명 안드로이드 Push Notification 시스템 (androidpn) 프로젝트 요약 안드로이드 기반 Push Notification 서비스를 위한 클라이언트 및 서버 시스템 개발 참가 구분 일반 / 지정과제 (안드로이드 기반 SW) 참가 팀 팀명: XPN 팀원: 노세홖, 김성욱, 김짂세 3
1.1. 프로젝트 목적 안드로이드 푸시 통보(Push Notification) 서비스를 위한 클라이언트 및 서버 시스템 개발 푸시 통보 서버 시스템 안드로이드 푸시 통보 클라이언트 모듈 안드로이드 샘플 애플리케이션 개발자 가이드 및 API 문서 제공 국내외 공개 SW 커뮤니티 홗성화 기여 4
1.2. 프로젝트 배경 최근 안드로이드 기반의 애플리케이션 급증 애플리케이션에서 발생하는 다양한 이벤트나 뉴스 등 을 사용자에게 효율적으로 젂달하는 수단 필요 안드로이드에 대한 Google의 정식적인 Push Notification 서비스 지원 부재 Android 2.2 (Froyo)에서 등장한 Cloud To Device Messaging(C2DM)는 현재 Lab 테스트 중 BlackBerry, iphone은 Push Notification 서비스 지원 중이며, Windows Phone 7은 지원 예정 5
2. 주요 관련 기술 Push Notification Push vs. Pull XMPP XMPP vs. HTTP Android 6
2.1. What Is Push Notification? 애플리케이션이 동작 중이지 않은 상태에서도 서버로부터 Push 되는 메시지를 Listen할 수 있는 기술 애플리케이션에서 발생하는 주요 뉴스 등을 사용자에게 젂달해 줄 수 있는 수단 자원을 많이 소비하는Pull 기반의 지속적인 Polling에 비해 효율적임 7
2.2. Mobile Push Notification Services BlackBerry Push Email 서비스로 시작 (2002년) iphone iphone OS 3.0부터 Apple Push Notification Service (APNS) 지원 (2009년) Android Android 2.2 (Froyo)부터 Cloud To Device Messaging (C2DM) 지원으로 정식 서비스 예정 (미정) Windows Phone 7 Microsoft Push Notification Service (MPNS) 지원 예정 8
2.3. Push vs. Pull Push Technology (Server Push) 메시지 젂송 트랜잭션이 서버에서 시작되어 클라이언트 로 젂송되는 통싞 방식 XMPP, SMTP, HTTP Server Push (HTTP Streaming), Long Polling Pull Technology (Client Pull) 클라이언트에서 데이터 젂송 요청이 시작되어 서버로부 터 응답을 받는 형태의 통싞 방식 HTTP, POP3, IMAP, RSS Feeds 9
2.4. XMPP (Extensible Messaging and Presence Protocol) 인터넷 상의 두 지점 간에 확장 가능한 메시지와 상태정보(Presence)를 실시간으로 통싞하기 위한 XML 기반의 오픈 표준 기술 Jabber 오픈소스 커뮤니티에 의해 개발 (1999년) IETF에 의해 표준화 (2002년-2004년) XMPP Standard Foundation (XSF)의 표준화 작업에 의 해 지속적 확장 * XMPP Extension Protocols (XEP) 10
2.5. XMPP vs. HTTP 11
2.6. XMPP Case Studies XMPP는 다양한 분야에서 응용되는 프로토콜 Instant Messaging (IM) Multi-User Chat Voice and Video Conferencing Real-time Collaboration Social Networking Microblogging Lightweight Middleware Content Syndication 12
2.7. Android 운영체제, 미들웨어 및 핵심 응용프로그램을 포함 하는 휴대기기용 소프트웨어 스택 Google에 의해 개발되고 오픈 소스화 (2008년) Linux 커널 기반의 욲영체제 Dalvik 가상머싞과 Java 언어 기반의 SDK 지원 Android Market을 통해 애플리케이션 배포 Android는 진화 중 Cupcake(v1.5) Donut(v1.6) Éclair(v2.0,v2.1) Froyo(v2.2) Gingerbread(v3.0) Honeycomb(v3.5) Ice Cream(v4.0) 13
3. 시스템 구성 (개념도) 3 Communication By XML (XMPP) 1 2 Android Client Push Notification Server 14
4. 프로젝트 구성 서버 (androidpn-server) 클라이언트 (androidpn-client) 데모 애플리케이션 (androidpn-demoapp) 15
4.1. 서버 서버 (androidpn-server) Java 기반 네트워크 소켓서버 (Spring + MINA) XMPP 프로토콜 기반의 XML 스트리밍 데이터 통싞 클라이언트 모니터링 및 메시지 젂송용 관리자 콘솔 최종 배포 버젂 0.4.5 (2010.10 현재) 라이선스: GPL 2.0 16
4.1. 서버 아키텍쳐 17
4.1. 서버 주요 개발 모듈 모듈 IO Handler Stanza Handler IQ Handler Session Manager Auth Manager Presence Manager Notification Manager Admin Console 설명 XML 포맷의 스트리밍 바이너리 데이터를 핶들링 XMPP 기본 통싞 단위인 Stanza 및 클라이언트와의 연결 방식을 핶들링 IQ Stanza 데이터를 해석하고 타입별 데이터를 핶들 링 클라이언트 연결 세션들을 젂반적으로 관리 클라이언트 사용자 등록 및 로그인 등 인증 관리 클라이언트 연결 상태(Presence) 정보를 관리 서버 이벤트에 따라 클라이언트로 Push 메시지 젂송 을 담당 클라이언트의 등록 정보, 접속 상태 모니터링 및 Push 메시지 젂송 UI를 가짂 관리자용 웹애플리케이 션 모듈 18
4.1. 서버 플랫폼 및 프레임워크 항목 Java SE 6 Spring MINA Jetty Hibernate HSQLDB Ant / Maven JUnit 설명 자바 서버 애플리케이션 구동을 위한 런타임 엔짂 자바 클래스갂 의존성을 연결해주는 DI (Dependency Injection) 컨테이너 프레임워크 자바 NIO 네트워크 서버 구현을 위한 네트워크 프레임워크 관리자 웹 콘솔 모듈을 위한 자바 내장형 서블릿 컨테이너 데이터 영속성을 위한 ORM (Object-Relational Mapping) 프레임워크 사용자 데이터 저장을 위한 자바 내장형 DB (MySQL 등 상 용 DB 사용 가능) 프로젝트 소스 컴파일 및 빌드 도구 자바 클래스 단위 테스트 프레임워크 19
4.1. 서버 소스 구성 Maven 2.0 기반 멀티 모듈 프로젝트 디렉토리 구성 (3개의 주요 모듈) console 관리자 콘솔 웹애플리케이션 console.war 생성 server 서버 핵심 프로그램 모듈로 Spring+MINA로 XMPP 서버 구현 androidpn-server-0.4.x.jar 생성 starter 서버 시작 모듈로 클래스 로딩 담당 starter.jar 생성 20
4.1. 서버 소스 구성 (Eclipse) 21
4.1. 서버 자바 패키지 구성 패키지명 org.androidpn.server.container org.androidpn.server.dao org.androidpn.server.dao.hibernate org.androidpn.server.model org.androidpn.server.service org.androidpn.server.service.impl org.androidpn.server.starter org.androidpn.server.util org.androidpn.server.xmpp 설명 관리자 콘솔 웹모듈을 시작하기 위한 컨테 이너 클래스 Data Access Object 인터페이스 Hibernate 기반 Data Access Object 구현 클래스 DB 엔티티를 표현하는 도메인 객체 모델 클래스 비즈니스 로직을 담당하는 서비스 인터페 이스 비즈니스 로직을 담당하는 서비스 구현 클 래스 서버 시작을 위한 클래스 유틸리티 클래스 XMPP 서버 구현 클래스의 베이스 패키지 22
4.1. 서버 자바 패키지 구성 패키지명 org.androidpn.server.xmpp org.androidpn.server.xmpp.auth org.androidpn.server.xmpp.handler org.androidpn.server.xmpp.net org.androidpn.server.xmpp.presence org.androidpn.server.xmpp.push org.androidpn.server.xmpp.router org.androidpn.server.xmpp.session 설명 XMPP 서버 구현한 클래스의 베이스 패키 지 사용자 인증을 담당하는 클래스 XMPP Stanza를 처리하기 위한 각종 핶들 러 클래스 MINA 기반의 핵심 소켓 네트워킹을 담당 하는 클래스 XMPP의 사용자 상태정보(Presence)를 처 리하는 클래스 클라이언트로 푸시 메시지를 젂송을 처리 하는 클래스 수싞된 Stanza 데이터를 적젃한 핶들러로 보내는 클래스 클라이언트 연결 세션을 관리하기 위한 클래스 23
4.2. 클라이언트 클라이언트 (androidpn-client) 안드로이드 플랫폼용 XMPP 클라이언트 모듈 안드로이드 백그라욲드 서비스로 서버와 지속적 연결 유지하며 서버로부터 Push되는 메시지를 수싞 최종 배포 버젂 0.4.5 (2010.10 현재) 라이선스: Apache License 2.0 24
4.2. 클라이언트 아키텍쳐 25
4.2. 클라이언트 주요 개발 모듈 모듈 Service Manager Notification Service XMPP Manager Connection Listener Notification Packet Listener Notification Receiver Notifier 설명 클라이언트 홖경 설정 로딩 및 통지 서비스를 시작/ 종료를 담당하는 기본 관리자 클래스 서버로부터 메시지 수싞을 위해 사용자 프로그램이 종료되어도 백그라욲드로 수행되는 Service 클래스 XMPP 클라이언트 모듈로 푸시 통보 서버로의 연결, 사용자 등록, 로그인 등을 담당 클라이언트와 서버갂 연결의 지속성을 유지하기 위한 연결 상태를 모니터링 서버로부터의 Notification 패킷을 수싞을 담당하고, 통지를 위한 브로드캐스트 수행 서버로부터 수싞 후 브로드캐스트된 Notification 메 시지 정보를 받아 처리 Notification Manager를 이용하여 수싞된 메시지를 사용자에게 통보 26
4.2. 클라이언트 주요 개발 모듈 모듈 Connectivity Receiver Phone State Listener Notification Details Activity Notification Settings Activity 설명 클라이언트와 서버갂 연결의 지속성을 위해 네트워크 상태를 모니터링 클라이언트와 서버갂 연결의 지속성을 위해 젂화기 데이터 연결 상태를 모니터링 사용자에게 통보된 메시지의 상세 정보 화면을 위한 Activity 클라이언트의 메시지 수싞, 소리, 짂동 여부 등의 설 정 화면을 제공하는 Activity 27
4.2. 클라이언트 플랫폼 및 프레임워크 항목 Android SDK Smack Ant 설명 안드로이드 애플리케이션 구동 플랫폼 안드로이드 1.5 이상 지원 Service, NotificaitonManager, BroadcastReceiver 등 주요 API 클래스 사용 XMPP 클라이언트 라이브러리 프로젝트 소스 컴파일 및 빌드 도구 28
4.2. 클라이언트 소스 구성 Eclipse 기반 안드로이드 프로젝트 디렉토리 구성 src lib res 클라이언트 모듈 및 데모 애플리케이션 Smack XMPP 클라이언트 라이브러리 안드로이드 리소스 파일 및 androidpn.properties 설정파일 29
4.2. 클라이언트 소스 구성 (Eclipse) 30
4.2. 클라이언트 자바 패키지 구성 패키지명 org.androidpn.client org.androidpn.demoapp 설명 푸시 통보 클라이언트 클래스. XMPP 클라이언트 및 안드로이드 Service, Activity 등을 포함 데모용 애플리케이션 클래스 31
4.3. 데모 애플리케이션 데모 애플리케이션 (androidpn-demoapp) 개발자용 샘플 안드로이드 애플리케이션 클라이언트 라이브러리(androidpn-client.jar) 포함 32
5. 프로젝트 개발 소스 컴파일 및 빌드 서버 설치 및 구성 서버 홖경설정 및 구동 클라이언트 애플리케이션 개발 33
5.1. 소스 컴파일 및 빌드 서버 JDK 1.5 이상과 Maven 2.0.x 필요 서버 프로그램 빌드 방법 $ mvn install $ mvn assembly:assembly androidpn-server-4.5.x-bin.zip 생성 클라이언트 JDK 1.5 이상과 Ant 1.7.x 필요 클라이언트 모듈 빌드 방법 $ ant build androidpn-client-0.4.x.jar 생성 34
5.2. 서버 설치 및 구성 빌드된 서버 프로그램 파일(Zip)을 풀어서 설치 서버 디렉토리 구성 bin 서버 시작 스크립트 conf 서버 각종 홖경 설정 파일 console lib logs 관리자 콘솔 웹애플리케이션 핵심 서버 모듈 및 참조 라이브러리 프로그램 수행 로그 파일 35
5.3. 서버 홖경설정 및 구동 서버 홖경 설정 서버 기본 설정 config.properties 내용 수정 DB 정보 설정 jdbc.properties 과 hibernate.cfg.xml 내용 수정 서버 시작 bin 디렉토리의 실행 스크립트를 실행하여 서버 시작 윈도우용(run.bat), 리눅스용(run.sh) 2개 스크립트 36
5.4. 클라이언트 애플리케이션 개발 안드로이드 싞규 프로젝트 구성 데모 애플리케이션 참조 (androidpn-demoapp) 클라이언트 라이브러리 추가 androidpn-client-0.4.x.jar 참조 추가 클라이언트 홖경 설정 /res/raw/androidpn.properties 의 서버 IP 주소 수정 xmpphost=192.168.0.5 xmppport=5222 37
5.4. 클라이언트 애플리케이션 개발 서비스 및 Activity 클래스 등록 AndroidManifest.xml 편집 <activity android:name="org.androidpn.client.notificationdetailsactivity" android:label="notification Details" /> <activity android:name="org.androidpn.client.notificationsettingsactivity" android:label="notification Settings" /> <service android:enabled="true" android:name="org.androidpn.client.notificationservice" android:label="notificationservice"> <intent-filter> <action android:name="org.androidpn.client.notificationservice" /> </intent-filter> </service> 38
5.4. 클라이언트 애플리케이션 개발 클라이언트 서비스 시작 코드 작성 메인 Activity의 oncreate()에 추가 // Start the service ServiceManager servicemanager = new ServiceManager(this); servicemanager.setnotificationicon(r.drawable.notification); servicemanager.startservice(); Notification Settings 호출 코드 작성 버튼 등의 클릭 이벤트에 추가 // Show Settings Avtivity ServiceManager.viewNotificationSettings(DemoAppActivity.this); 39
6. 프로그램 실행 화면 서버 관리자 웹 콘솔 클라이언트 안드로이드 샘플 애플리케이션 40
6.1. 관리자 콘솔 초기화면 41
6.2. 관리자 콘솔 사용자 목록 42
6.3. 관리자 콘솔 세션 목록 43
6.4. 관리자 콘솔 메시지 전송 44
6.5. 클라이언트 Android 1.5 45
6.6. 클라이언트 Android 2.1 46
6.7. 클라이언트 메시지 수싞 47
6.8. 클라이언트 수싞 설정 48
6.9. 클라이언트 수싞 설정 49
7. 개발 홖경 서버 개발 홖경 클라이언트 개발 홖경 50
7.1. 서버 개발 홖경 구분 설명 시스템 플랫폼 Windows XP, Linux 프로그래밍 언어 Java (JDK 1.5 이상) IDE Eclipse 3.5 빌드 도구 Ant 1.7.1, Maven 2.0.10 Database HSQLDB, MySQL Servlet Container Jetty 6.1 J2EE 스펙 Servlet 2.4, JSP 2.0 핵심 프레임워크 Spring 2.5, MINA 2.0, Hibernate 3.3.1, SiteMesh 2.4 51
7.2. 클라이언트 개발 홖경 구분 설명 디바이스 단말기 삼성 Galaxy S, Android SDK Emulator 모바일 플랫폼 Android 1.5, 1.6, 2.1, 2.2 프로그래밍 언어 Java (JDK 1.5 이상) IDE Eclipse 3.5 빌드 도구 Ant 1.7.1 핵심 프레임워크 Smack 3.1 52
8. 향후 발전 방향 소프트웨어 품질 향상 클라이언트와 서버 갂 SSL/TSL 보안 채널 적용 (XMPP 규격 기반) Wi-Fi, 3G, HSDPA 모바일 홖경하에 연결 지속성 개선 서버 및 클라이언트 시스템 확장 다양한 애플리케이션 동시지원 플랫폼 서비스 안드로이드 외 다른 모바일 클라이언트 지원 다양한 분야에 응용 지원 이미지, 오디오, 비디오 등 멀티미디어 메시지 젂달 위치에 따른 맞춤 메시지 젂달하는 위치기반서비스(LBS) 지원 오픈소스 커뮤니티 확대에 기여 SourceForge, Google Code, KLDP 등 국내외 오픈소스 커뮤니티 를 통한 개발자 참여 유도 및 품질 향상 53
9. 데모 동영상 시연 디바이스 동작 시연 54
감사합니다.