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