2016년 3월 17일 목요일

[WebApp] google fit imitation 만들어 보기 - 4

개요

Google fit api 를 활용한 hybrid app 개발

목적

- web app 구조를 학습한다.
- hybrid app 의 구조를 학습
- html/javascript 기본 학습

Source :

https://github.com/tigerbalm/my-google-fit2


Component diagram

PlantUML Diagram

PNGSVGTXTEdit

 

Screen flow

screen-flow

 

HTML page structure

webapp 에서는 하나의 html 내에서 여러 page 를 처리한다.
resource loading 문제등의 이유로 하나의 html 내에서 처리하기를 권장하는 사람도 있다.
html 내에 여러 page 가 있기 때문에 html 자체가 매우 복잡해지고 가독성도 많이 떨어진다. boiler code 가 많기 때문에 html 당 하나의 page 는 효율이 떨어진다.
적절하게 html수와 page 수를 조절하는 게 필요하다.
page-structure

 

Android mock

처음 작업할때는 android studio에서 작업해서 phone 이나 emulator 에 띄워서 html/javascript test 했다. 한번 build 해서 올리고 logcat 으로 확인하고 debugging 하는 게 생각보다 시간도 걸리고 귀찮은 작업이다. 어차피 html/javascript 이니 PC 상에서 작업하고, PC browser 에서 바로 확인하는 방법을 아래와 같이 사용했다. UI 작업은 많이 편해지고, chrome/firefox 의 개발자모드에서 바로 log 등을 확인할 수 있는 장점도 있다.
<< index.html / detail.html header  >>
image


<< androidmock.js >>
image

<< index.html >>
image

javascript <-> java code call

<index.html>
PlantUML Diagram

PNG |  SVG |  TXT |  Edit

<index.html>

PlantUML Diagram

PNG |  SVG |  TXT |  Edit


JSON data

Today's total data
[
    {
    "value" : 300,
    "color" : "#F7464A"
    "highlight" : "#FF5A5E"
    "label" : "Walking"
    }, 
    {
    :
    }
]


Workout List
[
    { "date" : "3/8", "steps" : 450 },
    { "date" : "3/7", "steps" : 450 },
    { "date" : "3/6", "steps" : 450 },
    :
] 

Workout daily detail
[
    { "time": 6, "steps": 456, "calories": 62,  "distance": 0.1 },
    { "time": 7, "steps": 56, "calories": 12,  "distance": 0.01 },
    { "time": 8, "steps": 106, "calories": 30,  "distance": 0.02 },
    :
]

사용한 library

Chart.js(http://www.chartjs.org/)
Timber
RxFit(X)

결론

- javascript의 기본 문법은 쉽다. -> debugging 은 어려움
- html/javascript/css/webview framework 자체에 대한 학습 시간이 필요
- UI 부분은 재사용이 가능할 수 있을 것 같다.
- 하지만, 단순한 UI 인 경우에는 native 로 platform 별로 각각 만드는 거나 html 사용하는 거나 차이가 있을까.
- hybrid 방식으로 구현된 open source app 을 찾기 어렵다. -> 많이 사용하지 않는 방식??
- hybrid 방식이 아닌 순수한 webapp 의 경우에는 차이가 있을 수도 있으니, 순수 webapp 구조를 생각해보는 것도 방법