리오집사의 기억저장소

Awareness API는 1편(구글 IO 2016, Awareness API 1편 - 구글의 Context 관련 API들) 에서 얘기했던 것처럼, Context를 알기 위한 9가지 API(Fused Location, Places API, Geofencing, Activity Recognition, Google Fit Platform, Sensors Platform, Nearby Notifications, Nearby Messages, Nearby Connections)들을 통합하여 만들어진 API입니다.

독립적인 9가지 API들을 각각 조합하여 사용함으로 인해 발생할 수 있는 배터리 소모 이슈나 조합 알고리즘을 구현하는데 드는 비용들을 줄여서,  오로지 애플리케이션 유저가 사용해야 할 기능 개발에만 집중할 수 있도록 도와주는 API가 바로 Awareness API입니다.

그럼 Awareness API에 대해 조금 더 상세하게 알아보도록 하겠습니다.


기본적으로 제공되는 Awareness API의 7 가지 Context Type

Awareness API는 아래의 그림처럼, 1편(구글 IO 2016, Awareness API 2편 - Awareness API) 에서 얘기했던 아홉 가지의 API들을 통합하여 7가지의 Context들을 사용할 수 있도록 제공합니다. 

Location 위도와 경도 값을 제공합니다.

Place '스타벅스' 와 같은 특정 장소를 확인할 수 있는 타입입니다.

Beacons 사용자 스마트폰 근처에 비콘 등 주변 장치들을 확인할 수 있도록 해주는 타입입니다.

Time 현지 시간을 알려줍니다.

Activity 걷고 있는지, 뛰고 있는지, 자전거를 타거나 자동차를 타고 있는지 등 사용자의 Activity를 확률로 검출해주는 타입입니다.

Headphones 재밌는 것이, 헤드폰을 꽂았는지도 사용자의 Context를 Awareness 인지에서 중요한 부분으로 삼고 알려줍니다.

Weather 현재 온도라던가 기후 조건 들을 알 수 있는 타입입니다.



Awareness API는 크게 펜스 API와 스냅샷 API로 나뉩니다.

Awareness API는 위의 그림처럼 크게 펜스 API와 스냅샷 API로 분류하여 사용합니다.

펜스 API( Fence API )는 말 그대로 울타리, 즉 어떤 기준을 설정하여 기준을 충족했는지 여부를 True or False 형태로 반환해주는API입니다. 기존의 지오펜스가 단순히 특정 장소에 언제 들어갔는지, 얼마나 머물렀는지, 언제 나왔는지 알 수 있는 특정 장소에 대한 펜스 였다면, Awareness API의 fence API는 운전을 언제 시작하고 종료했는지 운전 상태에 대한 펜스를 설정한다거나, 헤드폰을 꽂았는지 안 꽂았는지 펜스를 설정하는 등, 위에서 설명한 것처럼 7가지 Context에 대하여 fence를 설정할 수 있습니다. 원하는 Context 상태인지 아닌지를 판별해서 참, 거짓의 Boolean 상수 형태로 알려주는 API이기 때문에, 간단하게 펜스 API로 여러가지 Context에 대한 울타리, 즉 기준을 설정하고 간단히 조합아여 여러분이 필요한 기준을 만들 수가 있습니다. 예를 들어서, 운전중인 경우에는 근처에 휴게소가 있을 때에 알림을 주는 앱을 만든다고 생각해봅시다. 이럴 경우 운전 중인지에 대한 펜스 API를 만들고, 휴게소 근처에 있는지를 펜스 API로 만들어서, 운전 중인 걸 먼저 IF문으로 확인하고, 이후 운전 중으로 검출되면(True), if 문 안에 또 다른 if문으로 휴게소 근처인지를 판별하면 됩니다. 말이 어려주시다면 조금 있다 실제 코드로 확인해 주세요.

스냅샷 API( Snapshot API )는 7 가지 Context들의 실질적인 값을 알려줍니다. 펜스 API가 펜스(울타리) 안에 있느냐, 즉 사용자의 상태가 기준을 충족하는 검출해서 알려주는 API라면, 스냅샷 API는 실질적인 구체적인 값을 알 수 있는 API인 것입니다. 예를 들면 온도가 33도라던가, 내가 이동하는 속도가 10km/h 라던가, 내 위치의 위도/경도 값 등이 되겠습니다.


Fence API 사용하기

실제 코드를 한 번 볼까요? 먼저 Fence API입니다.

펜스 생성하기 솔직히 코드가 매우 직관적이기 때문에, 따로 설명드릴 것이 많이 없습니다. AwarenessFence 타입의 각각의 변수들의 값은 모두 True나 False 중 하나입니다. 아래 코드에서 startDriving, areaAroundStore 등의 변수들은 모두 True 아니면 False 값을 담고 있다는 것이죠. 눈여겨봐야할 것은 어떤 형태의 Fence이며 어떤 상태를 검출할지 결정하는 부분입니다. 각각의 펜스에 대하여 starting, in, during, inDailyInterval 등으로 원하는 조건들을 설정할 수가 있습니다.

위에서 설정한 각각의 펜스들을 하나로 조합한 펜스를 설정할 수도 있습니다. 아래 코드들에서는 상점 근처인지, 그리고 상점 오픈 시간인지, 운전중인 상태인지를 조합한 펜스입니다. 모든 조건을 충족하면 True, 아니라면 False를 반환합니다. 


펜스 등록하기 펜스를 생성하면, 펜스가 검출되었을 때를 알기 위해서 FenceUpdateRequest를 생성하여 등록해주어야 합니다. 아래 코드들은 위에서 생성했던 펜스들을 fenceUpdateRequest 요청에 넣어서 등록하는 코드입니다.


펜스 사용하기 펜스를 생성해서 등록까지 마쳤다면, Context가 검출되었을 때 실제로 유저들한테 어떤 서비스를 할 것인지 구현해야 됩니다. onReceive함수에서 이뤄지고, 저희가 등록한 펜스들의 True or False 값들로 특정 상황들을 검출하고, 서비스를 구현하면 됩니다.

기존에 이런 Context 앱들을 구현해보신 분들이라면, 이런 Fence API 사용이 기존보다 얼마나 직관적이고 사용하기 쉬운지 바로 느끼셨을 꺼라고 생각합니다.


Snapshot API 사용하기

스냅샷 API는 7가지 Context type의 실제 값을 알려주며, 사용 방법 또한 매우 간단합니다.



지금까지 구글 I/O 2016에서 공개된 Awareness API에 대해서 말씀드렸는데요,

관련된 실제 세션 유튜브 링크를 공유해드리며, 제가 해석한 내용이 필요한 분들에게 도움이 되었다면 좋겠습니다.


- Introducing the Awareness API, an easy way to make your apps context aware - Google I/O 2016


반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band