SNS 어플리케이션 전자통신컴퓨터공학부 2005003673 조성경
개요 안드로이드기반 SNS 어플리케이션 포스트를작성하면서버에업로드다른사용자들과공유 다른사람들의포스트를지도에서확인 외부 SNS(Twitter, Facebook) 과연동 사용자간메시지전송기능
개발환경 사용언어 : Java(Eclipse) DB Server : MySQL Client : SQLite 버전관리 : Subversion(Subclipse) 기타 MySQL Workbench SQLite Database Browser Putty via adb
실행화면 메인메뉴 실행시기기 Unique ID 생성 Gmail 계정과현재시간사용 숫자형태로저장 Gmail 계정 hashcode() * Calendar.getTimeInMills()
실행화면 서버 / 로컬에저장된글리스트 Activity 호출시지정 startactivity(intent) 미리보기사진표시 Gallery 에서 ImageView 로교체 하단 Tab Touch Focus 문제 ImageButton으로구현 TabbedActivity를상속
실행화면 글작성 날씨 / 위치 / 사진첨부 자동 / 수동첨부 Twitter/Facebook 연동 계정등록
실행화면 지도에글리스트아이콘 깃발로표시 풍선미리보기표시 터치시미리보기화면이동 /data/data/[package name]/cache/ 에캐시저장 메시지전달 / 위치정보확인
실행화면 받은메시지함 MessageTable GROUP BY user_id ORDER BY id ASC 사용자별대화내역 Twitter, Facebook Profile 사진사용
서버 - 클라이언트구성도 1. 데이터요청및전송 2. 데이터가져오기및저장 SQLite 저장소 Device A Server SQL 저장소 5. 데이터전송및요청 3. Push 메시지전달요청 SQLite 저장소 Device B Google C2DM 서버 4. Push 메시지전달
주요클래스 ( 클라이언트 ) 데이터클래스 Article 사용자가작성한글, 위치, 날씨정보 (Parcelable 상속 ) Photo 메모리절약을위해 Binary Data 대신파일이름관리 List Adapter ListView에 Item을표시하기위해연결하는 Adapter ArticleAdapter, PhotoAdapter, InboxAdapter, ChatAdapter Database (SQLiteTable) SQLite DB 를조작하는추상클래스 insert(), delete(), update() 등 상속받아사용 ArticleTable, MessageTable, PhotoTable
주요클래스 ( 클라이언트 ) 통신클래스 CommData 통신시데이터를담고있는클래스 ObjectStream을통해전송 직렬화선언 (Serializable) Android의 Parcelable은 PC의 Java와호환되지않음 CommArticle, CommPhoto, GPoint, Message, UserInfo CommRequest 서버에 CommData 를전달하는메서드모음 WrapTwitter, WrapFacebook Twitter 라이브러리와 Facebook SDK 사용편의를위한클래스
주요클래스 ( 클라이언트 ) Activity TabbedActivity, TabbedMapActivity 하단 Tab을구현하기위한 Activity 다른 Activity들이상속받음 TabList 서버 / 클라이언트에서 Article 을받아와표시 TabWrite Article 을작성하여서버 / 클라이언트에저장및 SNS 서비스로내보내기 TabInbox, TabChat 메시지목록및대화화면 BaseWidgets Activity 내부 widget을관리하는추상클래스 init(), registereventlistener() 메서드
주요클래스 ( 클라이언트 ) Preview Map 기타 데이터를미리보여주는클래스 ArticlePreview, WeatherPreview, PhotoPreview TabMap 지도에 Article을표시 TabbedMapActivity를상속 BalloonItemizedOverlay 지도에아이템표시 BalloonLayout 아이템을선택하면풍선을표시 C2DM_BroadcastReceiver C2DM 메시지수신 Pref, Settings App Preference 표시, 복원, 저장
주요클래스 ( 서버 ) CommData SQLTable MySQL DB를조작하는추상클래스 (insert, delete, update 등 ) 상속받아사용 (ArticleTable, C2DM Table, PhotoTable) MyTraceServer While 루프를돌면서클라이언트의접속을기다림 HandleRequest 클라이언트의요청을받아종류를분류 ProcessRequest 요청을처리하고결과를반환
MySQL Table article Article 클래스저장 photo 사진저장 (BLOB) Server c2dm_id Client 의 C2DM registration id 저장 Client
서버 - 클라이언트통신 Device Server Device Server - Article 리스트요청 - Article 업로드 - 다른 Deivce에메시지전송요청 - 주변 Article 리스트요청 - 사진정보, 사용자정보요청등 - Client의요청에대한응답 - Article 리스트전송 - 주변 Article 리스트전송 - 사진정보, 사용자정보전송등 Data Class CommData ObjectStream CommData Object Class 캐스팅후사용
C2DM 메시지전달과정 Google C2DM Server 1. Registration 요청 5. Push 메시지전달 2. Registration ID 발급 4. AuthToken 요청후 Push 메시지전달요청 3. 메시지전달요청 6. 추가데이터통신 3 rd Party Server
C2DM 메시지수신과정 사전등록 AndroidManifest.xml Receiver 에다음 Action 등록 - com.google.android.c2dm.intent.registration - com.google.android.c2dm.intent.receive 수신과정 Push Message BroadcastReceiver onreceive() 메서드 - intent action 수신시처리 RECEIVE 에등록된 APP 에 Broadcast Google C2DM Server Google 서비스 (com.google.process.gapps) 어플리케이션
Twitter/Facebook 연동 인증방법 Basic ID/PW 방식 oauth 서비스인증페이지접속 xauth 서비스업체사전승인후사용 ConsumerKey, SecretKey FaceBookAPPID, SecretCode 인증페이지에서인증 AccessToken, AccessTokenSecret Session, SessionExpire Callback URL 로받아옴 추후사용하기위해저장
Code Obfuscation Code Obfuscation Java 언어특성상 Decompile 이쉬움 M 모 MP3 Player, D 모동영상 Player, C 모다이얼러등 분석도구 APKTool, dex2jar, jad logcat 메시지와함께분석, 변조가능 분석, 변조.smali Proguard.apk classes.dex.class 클래스, 메서드, 변수명을 a, b, cc 등으로변경 코드보안이필요한경우필히적용 디버깅이어려움 ( 이름변환테이블필요, mapping.txt) 분석.java
참고자료 안드로이드 2.3 프로그래밍 / 이준호 / 위키북스 단계별예제로배우는안드로이드프로그래밍 / 한동호 / 제이펍 알짜만골라배우는안드로이드프로그래밍 / 마크머피 / 에이콘 Icon: Coquette (DryIcons) (free) 안드로이드개발자사이트 : http://developer.android.com/index.html 안드로이드펍 : http://www.androidpub.com Twitter4j: http://twitter4j.org/en/index.html Facebook SDK: http://developers.facebook.com/ and http://www.google.com