smart product app 과정 pascal a team / bitacademy java22기

Post on 21-Jan-2016

51 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Smart Product App 과정 PASCal A Team / Bitacademy Java22기. 스마트 디바이스 + 애플리케이션. 0. 배경. 스마트 프로덕트란 ?. 스마트 폰 , 스마트 TV 와 같은 스마트 디바이스와  애플리케이션 ( 응용프로그램 ) 의 연결을 통해 소비자에게 제품과 앱 기반 서비스를 동시에 제공하는 융합 제품이다. 글로벌 시장이 형성 중인 신 성장 산업이기도 하다. Withings. Wow!. 0. 배경. Context Aware Service. - PowerPoint PPT Presentation

TRANSCRIPT

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

top related