Upload
marja
View
51
Download
0
Embed Size (px)
DESCRIPTION
Smart Product App 과정 PASCal A Team / Bitacademy Java22기. 스마트 디바이스 + 애플리케이션. 0. 배경. 스마트 프로덕트란 ?. 스마트 폰 , 스마트 TV 와 같은 스마트 디바이스와 애플리케이션 ( 응용프로그램 ) 의 연결을 통해 소비자에게 제품과 앱 기반 서비스를 동시에 제공하는 융합 제품이다. 글로벌 시장이 형성 중인 신 성장 산업이기도 하다. Withings. Wow!. 0. 배경. Context Aware Service. - PowerPoint PPT Presentation
Citation preview
1
Smart Product App 과정
PASCal A Team / Bitacademy Java22기
2
0. 배경
스마트 프로덕트란 ?
스마트 디바이스 + 애플리케이션 스마트 폰 , 스마트 TV 와 같은 스마트 디바이스와 애플리케이션 ( 응용프로그램 ) 의 연결을 통해 소비자에게 제품과 앱 기반 서비스를 동시에 제공하는 융합 제품이다 .글로벌 시장이 형성 중인 신 성장 산업이기도 하다 .
Withings
3
0. 배경
Context Aware Service
사용자 중심 지능화된 서비스기기 주변의 사람 혹은 사물의 변화 (Context) 인지한다 .
그에 따라 사용자에게 최적화된 서비스를 제공한다 .
This way!
Wow!
4
0. 배경
Context Aware Smart Products?
일정 입력 따로 , 기기 설정 따로캘린더 서비스 상의 일정 정보에는 사용자의 상황 정보 (Context) 가 포함 되어 있다일정과는 별도로 휴대폰이나 주변의 스마트 프로덕트 설정을 변경 시켜줘야 한다
5
0. 배경
SmartTags
한번의 탭으로 특정 상황에 최적화 사용자의 변화하는 상황 , 위치 , 욕구에 맞춰 최적화된 기능을 제공하는 App 이다 .
사소하지만 중요한 서비스들을 번거롭게 신경을 쓰지 않고 자동으로 Phone 상태 관리가 가능하다 .
6
0. 배경
Locale
GPS 설정에 따라 활성화사용자가 설정을 원하는 Phone 환경으로 셋팅하여 저장한다 .
설정된 태그의 위치를 지도에서 선택하고 그 지역에 들어가면 설정된 환경으로 Phone 상태를 적용한다 .
7
오늘은 이런 이야기를 합니다0. 배경1. 제안 시스템2. 데모 및 시나리오3.PASCal 구현4. 제안 가능한 비지니스 모델5. 정리
8
1. 제안 시스템
시스템 전개도
9
1. 제안 시스템
설계 방침 및 기술적 과제
구글 캘린더 연동Android 에서 OAuth2.0 통과
Hybrid AppLocal HTML 파일간 데이터 전송
Context Aware ServiceSQLite and Multiple Threads
플랫폼의 확장App 간 메시지 전달
10
2. 데모 및 시나리오
11
3. 구현
시스템 전개도
12
3. 구현
Block Diagram
Android
Linux Kernel / Driver / HW
Java API
Native C / C++ Library DVM
Bluetooth
Activity
Telephony
Location
View
Widget
Graphics
HTTP
PASCal NXT remote
GoogleAdapter
PASCalEngine
Handler
EventImportor
UI
DAO
UI
NXTTalker
Choreography
13
일정 정보 획득 기존 인증 방식OAuth2.0Android 에서의 문제점Solution
14
3.1. 일정 정보 획득
기존 인증 방식
지나치게 많은 권한Client 에 사용자의 ID/PW 가 저장된다 .
Client 는 서버 상의 모든 사용자의 리소스에 접근이 가능하다 .
User
ID/ PW
Account Information
Client Server
15
3.1. 일정 정보 획득
OAuth2.0
제한된 권한ID/PW 대신 Access Token 을 사용한다 .
사용자는 Login 시 Client 가 Server 에서 접근 가능한 리소스 확인 가능하다 .
User
Token Reques
t
Code
OAuth2.0 Server ServerClient
Login & Consent
Exchange Code for
TokenToken
Call API w/ Token
16
3.1. 일정 정보 획득
Android 에서 Google OAuth2.0 사용시 문제점
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 을 빠져 나가게 된다 .
User
Token Reques
t
Code
OAuth2.0 Server
Google Server
Android
Login & Consent
Exchange Code for
TokenToken
Call API w/ Token
Android 는 http://localhost 가 없다 .
17
3.1. 일정 정보 획득
Solution
URL 에서 code 추출 하기구글에 redirect url 로 http://localhost 를 등록한다 .
사용자 로그인후 , http://localhost?code=xxxxx 의 형태로 code 가 전달된다 .
Android webview client 에서 code 를 추출하여 저장한다 .
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();}
}}
18
Hybrid AppHybrid App 이란Local HTML 간의 이동Solution
19
네이티브 앱과 모바일 웹의 장점을 동시에 !겉으로는 네이티브 앱의 모습을 가지고 앱스토어를 통해 배포한다 .
실제 주요 컨텐츠는 브라우저를 기반으로 하는 웹 형태로 서버로부터 정보를 전송한다 .
단말 고유기능 접근 + 유지보수용이 , 비용 절감된다 .
3.2. Hybrid App
Hybrid App 이란
20
JAVA
Local HTML 간의 데이터 전송HTML 은 화면 상의 정보 표시 및 정보 연결의 목적을 지닌다 .
server 를 경유하지 않고 스스로 데이터를 저장하거나 얻을 수 없다 .
server 가 없는 경우 HTML 과 연결된 JavaScript 에서 데이터를 주고 받아야 한다 .
a.html b.html
… Data …
<a href=“b.html”>
JavaScript
3.2. Hybrid App
Local HTML 간의 이동
21
3.2. Hybrid App
location.href.substr보내는 페이지 : window.location.href = 받는 url? 파라미터 = 값의 형태로 전달한다 .(get 방식 )
받는 페이지 : substring 으로 ? 뒤의 파마리터 및 값을 넘겨 받을 수 있다 .
Solution
a.html
b.html
link.js
… Data … <a href=“#”>
Data = location.href.substr
(location.href.lastIndexOf('=') +
1)
window.location.href
=“b.html?Data=”+Data
22
Context Aware ServiceThread 1. EventImportorStatus DiagramThread 2. PascalEngine잘못된 일정 정보Solution
23
3.3.Context Aware Service
Thread 1. EventImportor
calendarlist
Trigger start
go
Clear calendarli
stN
Y
Get schedules
from Google
Parsing schedules
Save schedules
Trigger end
Stop
EventImportor’s cyclecalendarlist 가 존재하면 지운다 .구글에서 Tag 가 있는 일정을 가져와 calendarlist 에
저장한다 .
Exist calendarlist ?
24
PASCalEngine 의 상태 변화
① 일정을 적용하는 상황② 일정이 적용되어 있는 상황③ 평상시로 되돌아가는 상황④ 평상시 핸드폰 상황
3.3.Context Aware Service
Status Diagram
Normal
Activity
① 현 시각 일치 OStatus = Normal
② 현 시각 일치 OStatus = Activity
③ 현 시각 일치 XStatus = Activity
④ 현 시각 일치 XStatus = Normal
25
3.3.Context Aware Service
Thread 2. PascalEngine
Start time< NOW &&NOW < end time?
Status = Activity?
Status = Normal?
Schedule’s Tag ==
Profile Name?
Get schedules
YN
YN
Back again Setting
go
YN
Get Profiles
YN
Fetch Trigger end
Stop
Profile
calendarlist
PascalEngine’s cycleCalenderlist 에서 일정을 가져온다 .
현재시간이 일정의 시작 시간과 끝 시간 사이에 있는지 비교한다 .Status 로 현재 이벤트가 적용중인지 아닌지를 판단한다 .
일정의 태그와 저장한 프로필의 이름이 같은지 확인을 한다 .프로필에 설정된값에 따라 기능을 수행한다 .
26
3.3.Context Aware Service
잘못된 일정 정보
calendarlist
Trigger start
go
Clear calendarli
stN
Y
Get schedules
from Google
Parsing schedules
Save schedules
Trigger end
Stop
Exist calendarlist ?
Start time< NOW &&NOW < end time?
Status = Activity?
Status = Normal?
Schedule’s Tag ==
Profile Name?
YN
YN
Back again Setting
Get schedules
go
YN
Get Profiles
YN
Fetch Trigger end
Stop
Profile
27
3.3.Context Aware Service
Solution
workingFLag 라는 boolean 을 하나 생성하여 두 thread 간의 의사소통이 가능하게 하였다 .workingFlag 가 false 면 EventImporter 가 작업을 시작하였다는 것이고 이때는 PascalEngine 은 일정을 가져오지 않는다 .대신 PascalEngine 은 잠시 후에 다시금 작업을 시도하게끔 하였다 .
public class EventImportor extends Thread {
public void run() {workingFlag =
false;// delete calendarlist// insert calendarlistworkingFlag =
true;SystemClock.sleep();
}}
public class PascalEngine extends Thread {
public void run() {if(workingFlag) {
// ……}
}}
Flag 를 통한 Thread 제어
28
플랫폼의 확장독립된 프로세스Binder 공유BindService 생명주기App 간 상호작용 AIDL
29
3.4. 플랫폼의 확장
독립된 프로세스
PASCal SandboxLinux user ID : 12345
PASCalLinux user ID : 12345
ResourcesLinux user ID : 12345
Network File SMS
Logs DB …
NXT SandboxLinux user ID : 54321
NXTLinux user ID : 54321
ResourcesLinux user ID : 54321
Network File SMS
Logs DB …
SandBox 로 관리되는 AndroidSandBox 란 지원하는 보호된 영역 안에서 프로그램을 실행하는 보안 소프트웨어다 . 프로세스 레벨 보안 , 사용자 및 애플리케이션과 연관되는 그룹 ID 와 같은 Linux 기능과 권한을 사용한다 .Android 애플리케이션은 고유 Linux 프로세스에서 실행되며 고유 사용자 ID 가 지정된다 .
Application 간 분리와 파일 및 디렉토리 , 디바이스 자원에 대한 권한 등을 관리한다 .
30
Binder 공유
Binder 를 통해서 관리리눅서 커널에 있는 Binder 를 통해서 관리된다 .
서비스에 바인딩되면 실행 중에 메서드를 호출할 수 있도록 해 준다 .
바인딩은 원격 제어할 수 있도록 서비스에 연결 하는 것이다 .
PASCal NXT
Android libutil.so
/dev/binder
Service Manager
메모리
User space
Kernel
3.4. 플랫폼의 확장
31
BindService 생명주기
공유 공간 확보 – 바인딩
Linux
Binder
서비스에 바인딩되면 실행 중에 메서드를 호출할 수 있도록 해 준다 .
Binder 는 리눅서 커널에 있는 Binder 를 통해서 관리된다 .
(3)Listener 호출
PASCal
BindService
serviceConnection()
NXT
onBind(…)
3.4. 플랫폼의 확장
(1) 서비스 호출
(2)IBinder 타입 객체 리턴
BindService()->onCreate()->onBind()-> 서비스와 상호작용 ->unBind()->onDestroy()
32
NXT
PlayService
IPlayService.Stub
Binder
BBinder
execTransact()
dance()
dance()
BpBinder
PASCal
PlayManager
IPlayService.Stub.Proxy
BinderProxy
getSystemService()
dance()
dance()
Transact()
(5)dance() 함수 호출
서비스 매니저
ServiceManager
ServiceManagerProxy
BinderProxy
App 간 상호작용
BpBinder
JavaBBinderJNI 네이티브 함수
(1)PlayService 서비스 등록요청
(2) 서비스 등록(4) 서비스 검색
addService()
getService()
ContextManager
(3)PlayService 서비스 검색 요청
Transact()
3.4. 플랫폼의 확장
33
Proxy method Stub method
onTransact()(gen/NXT.java)
NXT.Java
AIDL
더 간편하게데이터를 주고 받기위해서는 Proxy method, onTrnsact(), Stub method 를 구현해야 한다 .
클라이언트에서 서버의 메서드를 호출하게 되면 프록시 메서드에서 onTransact() 에 요청하고 stub 메서드를 통해 함수를 실행시킨다 .
AIDL 컴파일러는 서비스 인터페이스 , 프록시 , 스텁 소스 코드를 자동으로 생성해준다 .
PASCal NXT
AIDL(src/nxt.aidl)
트랜잭션 코드를 통해Stub 메서드 호출
compile
3.4. 플랫폼의 확장
34
AIDL
AIDLAIDL 은 클라이언트에서 사용 가능한 메서드와 필드를 정의하는 인터페이스를 정의AIDL 을 컴파일을 한 java 파일은 gen 폴더 안에 자동 생성된다 . AIDL 서비스가 던진 예외는 서비스 사용자에게 돌아가지 않기 때문에 예외처리를 해주는 것이 좋다 .
package org.jfedor.nxtremotecontrol;
interface NXT{ String dance();}
/* * 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; }…
NXT.aidlNXT.java
컴파일
동기적인 호출임으로 클라이언트측은 서비스가 결과값을 반환 할 때까지는 동작을 멈추게 된다 .
3.4. 플랫폼의 확장
35
Part 0: ???
비즈니스 모델
Business Model5. 확장성
36
5. 확장성
Home networking service 와의 연계
PASCal
Skifta
iMediaShare
Multimedia sharing
Ezville Smart Home
Samsung Smart Home
Home automation
Home networking service
or@ 기상
@귀가
37
6. 정리
오늘 이야기의 요점은
구글 연동 및 Context Aware Service OAuth2.0 and Multiple Threads HTML5 기반 Hybrid App 구현Local HTML 간 메시지 전송
다양한 서비스와 연계 가능AIDL 을 통한 App 간 메시지 전달
38
39
7.One more thing
Google code
http://code.google.com/p/p-a-s-cal/SVN 을 통한 source code distribution
UML 등 관련 문서가 있으며 ,
Wiki, Issues 등 피드백이 가능하다 .
40
41
42
추가 자료
43
좋은 점들만 합쳐놓을 수는 없을까 ? 불편한 게 한두가지가 아니군 !
특허정보검색서비스 http://portal.kipris.or.kr
0. 배경
특허
44
0. 배경
평가
일정에 따른 상태 자동 변경
확장 가능성
SmartTags
Locale휴대용 통신 단말기를 이용한 일정 관리 방법
이동통신 단말기의 알람 정보 설정 방법 및 장치
일정관리기능이 구비된 이동통신단말기와 그 제어 방법
유지보수 용이
PASCal
X
X
X X X O O
X X X X X O
X X X X O