Google Fit Platformについて調べてみた
Google Fitについて
@yutakikuchi_です。 今日はGoogle Fit Platformを利用してできることを調べてみました。Google Fitは言うまでも無くGoogleが提供するFitnessアプリで2014年から公開されています。また2021.11.04現在、Google Fitをスマートフォンのアプリとしてインストールすることで、アクティビティとしての毎日の目標、歩数計測、ハートポイント(強めの運動)、消費エネルギーなど、管理することができます。2021.11月において、Androidの一部の端末(Pixel)では、スマートフォンのカメラ機能で、呼吸数や心拍数の確認をすることができます。ちなみに、僕はGoogle Pixel 4aの保有者であり、購入時からGoogle Fitはプリインされていたと思います。
また、最近ではNianticが出した新しいARゲームのPikmin BloomでもGoogle Fitのinstallが必要であり、Google Fitがもしかしたら更に注目を集めるかもしれないですね。ちなみに、Pikmin Bloomは歩くことを重視したゲームのようです。
https://play.google.com/store/apps/details?id=com.nianticlabs.pikmin&hl=ja&gl=US topics.nintendo.co.jp
Google Fitは様々なアプリと連携することができるので、Google Fitに無いデータを他のアプリで取得して、それをGoogle Fit側で管理することもできたり。またその逆もできます。Google Fitが公式として連携しているアプリは下記のURLに記載されています。
引用 : https://play.google.com/store/apps/collection/promotion_3000e6f_googlefit_all
Google Fitのアプリでは取れないデータ、例えば日々の体重など、OMRONの体重計から取得、それをHealth syncアプリを経由してGoogle Fit側で一元管理するなど、複数のアプリを使い回すとそれぞれのアプリで取ったデータが一元管理できます。もちろん睡眠時間などのデータも他のアプリと連携することで取得可能です。下記のHealth syncはGoogle Fitの公式で連携アプリとして掲載されています。
Health Sync - Apps on Google Play
Google Fit Platformについて
引用 : https://developers.google.com/fit/overview
Google Fit PlatformはGoogle Fitの裏側の仕組みと一言でいると思いますが、下記の4つの機能で成り立っています。主に開発者やサービス提供者がデータをGoogle Fit Platformに登録したり、データを呼び出したアプリケーションを作るための機構とも言えると思います。
- 様々なデバイスやセンサーから取れる個人のFitness関係のデータを管理するStore
- Fitness storeと簡単に連携するセンサーフレームワークを提供。下記のAPIと一緒に活用
- データへのアクセスの認証認可の仕組み
- AndroidのSDKやAPI、更にはWebのRestAPIの提供
Google Fit PlatformのAPIを使ってみる
https://developers.google.com/fit/rest/v1/get-started
こちらのGet startedに掲載されている手順で自身のGoogle Fitness Storeに登録されているデータを引っ張ってくる手順を記載します。手順の OAuth 2.0 Playground
の項目を実施します。PlaygroundはOAuth認証が必要なAPIを簡単にお試しできるツールです。尚、僕は上でも書きましたがGoogle pixel 4aにGoogle Fitをインストールして、自身のGmailアカウントと連携をしているというのが実行の前提になります。またAPIのReference一覧は下記のURLに存在します。
https://developers.google.com/fit/rest/v1/reference
- Step 1 : Select & authorize APIs
- authorization コードの取得
- Step 2 : Exchange authorization code for tokens
- authorization コードからtokenへの変換
- Step 3 : Configure request to API
上を実行すると、Authorizeボタンの後にGoogleアカウントにGoogle Playgroundからのアクセスを求められるので、Continue/許可します。許可後にStep2として取得したauthorization コードから Refresh token とAccess tokenの2つを取得します。Step3の画面でAPIのEndpointを入力すると、その際に取得したAccess Tokenを利用しながら、HTTP GETで次のURLにRequestを送るように設定します。 Google FitのAPIとして、詳細のデータを取得する際はDatasourceの中にあるDatasetへのアクセスが必要なので、Datasetの取得には2段階のAPI実行が必要となります。
- Datasource一覧の取得
https://www.googleapis.com/fitness/v1/users/me/dataSources
- Dataset一覧の取得
https://www.googleapis.com/fitness/v1/users/userId/dataSources/dataSourceId/datasets/datasetId
Step3を実行するとAPIから200OKのresponseが返ってきます。Response Bodyの中身はJsonなので、それを読み取ります。下記の dataStreamId
の値が実際のDatasetへのアクセスのURIになるので、取得して次のAPIにRequestを送ります。
{ "dataQualityStandard": [], "dataType": { "field": [ { "name": "steps", "format": "integer" } ], "name": "com.google.step_count.delta" }, "dataStreamName": "estimated_steps", "application": { "packageName": "com.google.android.gms" }, "dataStreamId": "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps", "type": "derived" },
上で取得したdataStreamIdを基に、実際のDatasetにアクセスをします。DatasetのEndpointの末尾に datasetIdとありますが、取得範囲を時間として示すstartTimeとendTimeをnanosecondsとして連結したstringのようです。datasetIdというパラメータの名前からは想像できない、ちょっと分かりづらいですね。ここでは 1635735600000000000-1635908400000000000 として指定します。
Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: "startTime-endTime" where startTime and endTime are 64 bit integers.
Google playgroundのStep3のURLを上記ものに変えて実行します。※末尾のdatasetIdは自身での書き換えが必要になりますので、ご注意ください。上のRequestはstep_count.delta
を取得するものになるので、これで特定nanoseconds間の歩数を配列形式で受け取ることができます。ちなみにstep_count.deltaの説明は下記にあります。
https://developers.google.com/fit/datatypes/activity#step_count_delta
{ "minStartTimeNs": "1635735600000000000", "maxEndTimeNs": "1635908400000000000", "dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps", "point": [ { "modifiedTimeMillis": "1635738581776", "startTimeNanos": "1635735582759950932", "endTimeNanos": "1635735642759950932", "value": [ { "mapVal": [], "intVal": 3 } ], "dataTypeName": "com.google.step_count.delta", "originDataSourceId": "raw:com.google.step_count.cumulative:Google:Pixel 4a:xxxxx:Step Counter" }, { "modifiedTimeMillis": "1635738581776", "startTimeNanos": "1635738494664463688", "endTimeNanos": "1635738554664463688", "value": [ { "mapVal": [], "intVal": 4 } ], "dataTypeName": "com.google.step_count.delta", "originDataSourceId": "raw:com.google.step_count.cumulative:Google:Pixel 4a:xxxxx:Step Counter" },
以上がGoogle Fit Platformについて調べて触ってみた内容になります。Google Fit PlatformのAPIを活用すると様々なヘルスケアアプリが作れそうですね。