• 440 likes • 616 Views
Smart Product App 과정 PASCal A Team / Bitacademy Java22기. 스마트 디바이스 + 애플리케이션. 0. 배경. 스마트 프로덕트란 ?. 스마트 폰 , 스마트 TV 와 같은 스마트 디바이스와 애플리케이션 ( 응용프로그램 ) 의 연결을 통해 소비자에게 제품과 앱 기반 서비스를 동시에 제공하는 융합 제품이다. 글로벌 시장이 형성 중인 신 성장 산업이기도 하다. Withings. Wow!. 0. 배경. Context Aware Service.
E N D
Smart Product App 과정 PASCal A Team / BitacademyJava22기
스마트 디바이스+애플리케이션 • 0.배경 • 스마트 프로덕트란? • 스마트 폰, 스마트 TV와 같은 스마트 디바이스와 애플리케이션(응용프로그램)의 연결을 통해 • 소비자에게 제품과 앱 기반 서비스를 동시에 제공하는 융합 제품이다. 글로벌 시장이 형성 중인 신성장 산업이기도 하다. Withings
Wow! • 0.배경 Context Aware Service This way! 사용자 중심 지능화된 서비스 기기 주변의 사람 혹은 사물의 변화(Context) 인지한다. 그에 따라 사용자에게 최적화된 서비스를 제공한다.
0.배경 • Context Aware Smart Products? 일정 입력 따로, 기기 설정 따로 캘린더 서비스 상의 일정 정보에는 사용자의 상황 정보 (Context)가 포함 되어 있다 일정과는 별도로 휴대폰이나 주변의 스마트 프로덕트 설정을 변경 시켜줘야 한다
0.배경 SmartTags 한번의 탭으로 특정 상황에 최적화 사용자의 변화하는 상황,위치,욕구에 맞춰 최적화된 기능을 제공하는 App이다. 사소하지만 중요한 서비스들을 번거롭게 신경을 쓰지 않고 자동으로 Phone상태 관리가 가능하다.
0.배경 Locale GPS설정에 따라 활성화 사용자가 설정을 원하는 Phone환경으로 셋팅하여 저장한다. • 설정된 태그의 위치를 지도에서 선택하고 그 지역에 들어가면 설정된 환경으로 Phone상태를 적용한다.
오늘은 이런 이야기를 합니다 0.배경 1.제안 시스템 2.데모 및 시나리오 3.PASCal 구현 • 4.제안 가능한 비지니스 모델 • 5.정리
1.제안 시스템 시스템 전개도
1.제안 시스템 설계 방침 및 기술적 과제 구글 캘린더연동 Hybrid App • Context Aware Service • 플랫폼의 확장 Android 에서 OAuth2.0 통과 Local HTML파일간 데이터 전송 • SQLite and Multiple Threads • App간 메시지 전달
3.구현 시스템 전개도
3.구현 • Block Diagram Android PASCal NXT remote GoogleAdapter UI UI DAO EventImportor NXTTalker Handler PASCalEngine Choreography Java API Telephony Bluetooth Graphics View Activity Location Widget HTTP Native C / C++ Library DVM Linux Kernel / Driver / HW
일정 정보 획득 • 기존 인증 방식 • OAuth2.0 • Android에서의 문제점 • Solution
3.1. 일정 정보 획득 기존 인증 방식 Client Server ID/ PW Account Information User 지나치게 많은 권한 Client에 사용자의 ID/PW가 저장된다. Client는 서버 상의 모든 사용자의 리소스에 접근이 가능하다.
3.1. 일정 정보 획득 OAuth2.0 OAuth2.0 Server Client Server Token Request Login & Consent Code Exchange Code for Token User Token Call API w/ Token 제한된 권한 ID/PW대신 Access Token을 사용한다. 사용자는 Login시 Client가 Server에서 접근 가능한 리소스 확인 가능하다.
3.1. 일정 정보 획득 • Android에서 Google OAuth2.0 사용시 문제점 OAuth2.0 Server Android Google Server Token Request Login & Consent Code Exchange Code for Token User Token Call API w/ Token Code를 받을 수 없다!! Google의 경우 Code를 사전에 정의된 Redirect URL 로 전달한다. • Redirect URL 에는 구글 상의 주소인 urn:ietf:wg:oauth:2.0:oob 과 Android 기기상의 http://localhost 만 등록 가능하다. • urn:ietf:wg:oauth:2.0:oob 사용시, 브라우져가 기동되며 App을 빠져 나가게 된다. • Android는 http://localhost 가 없다.
3.1. 일정 정보 획득 Solution public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if(url.indexOf("code=")!=-1) { code = url.substring(url.indexOf("code=")+5); try { //Save code ….. } catch (IOException e) { e.printStackTrace(); } } } URL에서 code 추출 하기 구글에 redirect url로 http://localhost 를 등록한다. 사용자 로그인후,http://localhost?code=xxxxx 의 형태로 code가 전달된다. Android webview client에서 code를 추출하여 저장한다.
Hybrid App Hybrid App이란 Local HTML 간의 이동 Solution
3.2. Hybrid App Hybrid App이란 • 네이티브 앱과 모바일 웹의 장점을 동시에! • 겉으로는 네이티브 앱의 모습을 가지고 앱스토어를 통해 배포한다. • 실제 주요 컨텐츠는 브라우저를 기반으로 하는 웹 형태로 서버로부터 정보를 전송한다. 단말 고유기능 접근 + 유지보수용이, 비용 절감된다.
3.2. Hybrid App • Local HTML 간의 이동 … Data … <a href=“b.html”> a.html b.html JavaScript • Local HTML 간의 데이터 전송 • HTML은 화면 상의 정보 표시 및 정보 연결의 목적을 지닌다. • server를 경유하지 않고 스스로 데이터를 저장하거나 얻을 수 없다. server가 없는 경우 HTML과 연결된 JavaScript에서 데이터를 주고 받아야 한다. JAVA
3.2. Hybrid App • Solution … Data … <a href=“#”> window .location.href =“b.html?Data=” +Data a.html Data = location.href.substr (location.href. lastIndexOf('=') + 1) link.js b.html location.href.substr • 보내는 페이지 : window.location.href = 받는 url?파라미터=값의 형태로 전달한다.(get방식) • 받는 페이지 : substring으로 ? 뒤의 파마리터 및 값을 넘겨 받을 수 있다.
Context Aware Service Thread 1. EventImportor Status Diagram Thread 2. PascalEngine 잘못된 일정 정보 Solution
3.3.Context Aware Service Thread 1. EventImportor go Clear calendarlist Stop Exist calendarlist? Y N Trigger start Trigger end Get schedules from Google calendarlist Parsing schedules Save schedules • EventImportor’s cycle • calendarlist가 존재하면 지운다. • 구글에서Tag가 있는 일정을 가져와 calendarlist에 저장한다.
3.3.Context Aware Service Status Diagram PASCalEngine 의 상태 변화 ① 일정을 적용하는 상황 ② 일정이 적용되어 있는 상황 ③ 평상시로 되돌아가는 상황 ④ 평상시 핸드폰 상황 ④ 현 시각 일치 X Status = Normal ① 현 시각 일치 O Status = Normal Normal Activity ③ 현 시각 일치 X Status = Activity ② 현 시각 일치 O Status = Activity
3.3.Context Aware Service Thread 2. PascalEngine go Stop N N N N Y Y Y Y Get schedules Trigger end Start time< NOW && NOW< end time? Status = Activity? calendarlist Back again Setting Status = Normal? Get Profiles Profile • PascalEngine’s cycle Schedule’s Tag == Profile Name? • Calenderlist에서 일정을 가져온다. • 현재시간이 일정의 시작 시간과 끝 시간 사이에 있는지 비교한다. Fetch • Status로 현재 이벤트가 적용중인지 아닌지를 판단한다. • 일정의 태그와 저장한 프로필의 이름이 같은지 확인을 한다. • 프로필에 설정된값에 따라 기능을 수행한다.
3.3.Context Aware Service • 잘못된 일정 정보 go go Clear calendarlist Stop Stop Exist calendarlist? N N N N Y Y Y Y Y N Trigger start Trigger end Trigger end Get schedules Start time< NOW && NOW< end time? Status = Activity? Get schedules from Google calendarlist Back again Setting Status = Normal? Parsing schedules Get Profiles Profile Save schedules Schedule’s Tag == Profile Name? Fetch
3.3.Context Aware Service Solution public class EventImportor extends Thread { public void run() { workingFlag = false; // delete calendarlist // insert calendarlist workingFlag = true; SystemClock.sleep(); } } public class PascalEngine extends Thread { public void run() { if(workingFlag) { //…… } } } Flag를 통한 Thread 제어 workingFLag라는 boolean을 하나 생성하여 두 thread 간의 의사소통이 가능하게 하였다. workingFlag가 false면 EventImporter가 작업을 시작하였다는 것이고 이때는 PascalEngine은 일정을 가져오지 않는다. • 대신 PascalEngine은 잠시 후에 다시금 작업을 시도하게끔 하였다.
플랫폼의 확장 독립된 프로세스 Binder 공유 BindService 생명주기 App간 상호작용 AIDL
3.4.플랫폼의 확장 독립된 프로세스 PASCal Sandbox Linux user ID : 12345 NXT Sandbox Linux user ID : 54321 NXT Linux user ID : 54321 PASCal Linux user ID : 12345 Resources Linux user ID : 12345 Resources Linux user ID : 54321 Network Network File File SMS SMS Logs Logs DB DB … … SandBox로 관리되는 Android SandBox란 지원하는 보호된 영역 안에서 프로그램을 실행하는 보안 소프트웨어다. 프로세스 레벨 보안, 사용자 및 애플리케이션과 연관되는 그룹 ID와 같은 Linux 기능과 권한을 사용한다. Android 애플리케이션은 고유 Linux 프로세스에서 실행되며 고유 사용자 ID가 지정된다. Application 간 분리와 파일 및 디렉토리, 디바이스 자원에 대한 권한 등을 관리한다.
3.4.플랫폼의 확장 Binder 공유 Service Manager PASCal NXT User space Android libutil.so /dev/binder Kernel 메모리 Binder를 통해서 관리 리눅서커널에 있는 Binder를 통해서 관리된다. 서비스에 바인딩되면실행 중에 메서드를 호출할 수 있도록 해 준다. 바인딩은 원격 제어할 수 있도록 서비스에 연결 하는 것이다.
3.4.플랫폼의 확장 BindService 생명주기 PASCal NXT BindService onBind(…) (1)서비스 호출 serviceConnection() (2)IBinder타입 객체 리턴 (3)Listener 호출 Linux 공유 공간 확보 – 바인딩 Binder BindService()->onCreate()->onBind()->서비스와 상호작용->unBind()->onDestroy() 서비스에 바인딩되면실행 중에 메서드를 호출할 수 있도록 해 준다. Binder는 리눅서 커널에 있는 Binder를 통해서 관리된다.
3.4.플랫폼의 확장 App간 상호작용 PASCal 서비스 매니저 NXT (3)PlayService서비스 검색 요청 getSystemService() PlayService ServiceManager (1)PlayService서비스 등록요청 dance() PlayManager getService() addService() dance() IPlayService.Stub ServiceManagerProxy IPlayService.Stub.Proxy dance() dance() (4)서비스 검색 (2)서비스 등록 (5)dance() 함수호출 Binder BinderProxy BinderProxy execTransact() Transact() Transact() JNI 네이티브 함수 JavaBBinder BpBinder Context Manager BBinder BpBinder
3.4.플랫폼의 확장 AIDL PASCal NXT AIDL (src/nxt.aidl) compile NXT.Java onTransact() (gen/NXT.java) Proxy method Stub method 트랜잭션 코드를 통해 Stub 메서드 호출 더 간편하게 데이터를 주고 받기위해서는Proxy method, onTrnsact(), Stub method를 구현해야 한다. AIDL 컴파일러는 서비스 인터페이스, 프록시, 스텁 소스 코드를 자동으로 생성해준다. 클라이언트에서 서버의 메서드를 호출하게 되면 프록시메서드에서onTransact()에 요청하고 stub 메서드를 통해 함수를 실행시킨다.
3.4.플랫폼의 확장 AIDL NXT.java NXT.aidl /* * This file is auto-generated. DO NOT MODIFY. … …public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { switch (code){ case INTERFACE_TRANSACTION:{ reply.writeString(DESCRIPTOR); return true; } case TRANSACTION_dance:{ data.enforceInterface(DESCRIPTOR); java.lang.String _result = this.dance(); reply.writeNoException(); reply.writeString(_result); return true; } … package org.jfedor.nxtremotecontrol; interface NXT{ String dance(); } 컴파일 AIDL AIDL은 클라이언트에서 사용 가능한 메서드와 필드를 정의하는 인터페이스를 정의 AIDL을 컴파일을 한 java 파일은 gen 폴더 안에 자동 생성된다. AIDL 서비스가 던진 예외는 서비스 사용자에게 돌아가지 않기 때문에 예외처리를 해주는 것이 좋다. 동기적인 호출임으로 클라이언트측은 서비스가 결과값을 반환 할 때까지는 동작을 멈추게 된다.
Part 0: ??? 비즈니스 모델 5.확장성 Business Model
5.확장성 Home networking service 와의 연계 Home networking service Multimedia sharing Skifta iMediaShare @기상 or PASCal Home automation Ezville Smart Home Samsung Smart Home @귀가
6.정리 오늘 이야기의 요점은 구글 연동 및Context Aware Service HTML5기반 Hybrid App 구현 • 다양한 서비스와 연계 가능 • OAuth2.0 and Multiple Threads Local HTML간 메시지 전송 • AIDL을 통한 App간 메시지 전달
7.One more thing Google code • http://code.google.com/p/p-a-s-cal/ SVN을 통한 source code distribution UML 등 관련 문서가 있으며, Wiki, Issues 등 피드백이 가능하다.
0.배경 특허 좋은 점들만 합쳐놓을 수는 없을까? 불편한 게 한두가지가 아니군! 특허정보검색서비스 http://portal.kipris.or.kr
0.배경 평가 일정관리기능이 구비된 이동통신단말기와 그 제어 방법 이동통신 단말기의 알람 정보 설정 방법 및 장치 휴대용 통신 단말기를 이용한 일정 관리 방법 PASCal Locale SmartTags 일정에 따른 상태 자동 변경 O O X X X X 유지보수 용이 X O X X X X 확장 가능성 X X X X O X