Google Health API を使用して歩数エクスペリエンスを開発する

Google Health API は、steps 間隔データ型を使用してユーザーの歩数とアクティビティ データをトラッキングします。歩数は、1 日の身体活動の基本的な測定値であり、デベロッパーがフィットネスの進捗状況を追跡したり、エネルギー消費量を計算したり、ユーザー向けの 1 日のアクティビティの概要を作成したりするのに役立ちます。

ユーザーに最適なエクスペリエンスを提供するために、アプリで歩数計の指標を読み取り、構造化する方法について説明します。

サポートされるデータタイプ

API は、歩数のトラッキングに次のデータ型をサポートしています。

表: Google Health API の歩数データ型
データ型 利用可能な
オペレーション
スコープ
手順
dataType: steps
filter parameter: steps
レコードタイプ: Interval

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly

ガイドライン

歩数トラッキングをアプリに統合する際は、以下の設計と実装のガイドラインに沿ってください。

速度とペースの計算

Google Health API は、標準的な数式を使用して速度とペースを計算します。

  • 速度 = distance / time(hour)
  • ペース = time(seconds) / distance

リクエストで指定された Accept-Language ヘッダーによって、距離の単位が決まります。

1 日の概要

旅行、タイムゾーンの変更、夏時間で 1 日の歩数を正確に集計するには、クライアントサイドで期間を計算しないでください。代わりに、UTC オフセットを使用して物理データギャップを自動的に調整する dailyRollUp エンドポイントをクエリします。ロールアップは、リクエストされた日の合計歩数を表す countSum フィールドを含む StepsRollupValue を返します。

ユーザー インターフェースの描画(調整)

ステップ データを表示するユーザー インターフェース要素を構築する場合は、reconcile エンドポイントを使用します。複数のデータソース(スマートウォッチや携帯電話など)が同時に歩数を記録した場合、reconcile エンドポイントは競合を解決し、ストリームを統合して、調整された単一のデータ ストリームを返します。

1 日のトラッキングとヒストグラム

1 日を通してのユーザー アクティビティの詳細(グラフなど)を表示するには:

  • 1 時間ごとの歩数ヒストグラム: rollUp エンドポイントをクエリし、windowSize パラメータを使用して期間(1 時間の場合は 3600s など)を指定します。
  • すべての歩数記録: list エンドポイントを使用して、最も詳細な未加工の歩数記録を取得します。

rollUpdailyRollUpreconcile エンドポイントは dataSourceFamily パラメータを受け入れ、特定のソースグループからデータをフィルタできます。詳細と使用例については、エンドポイント ガイドのデータソース ファミリーでフィルタして集計するをご覧ください。

ウェブフックを使用したリアルタイム同期

steps データ型のコレクションを購読すると、新しい歩数データがインポートまたは同期されたときにリアルタイムで通知を受け取ることができます。REST エンドポイントをポーリングするのではなく、これらの Webhook 通知に応答してクライアントサイドのダッシュボードを動的に更新します。サブスクリプションの設定方法について詳しくは、Webhook サブスクリプションをご覧ください。

真のゼロを処理する

Google Health API は、真のゼロを実装して、座りがちなインターバルを解決します。ユーザーがトラッカーを装着しているものの、特定の期間に歩いていない場合、API はその期間のレコードを返します。このレコードには、通常のデータソースとタイムスタンプのメタデータが含まれますが、count プロパティは省略されます。

これにより、次のことを区別できます。

  • 手首に装着したままの静止状態: デバイスを装着しているが、歩いていない状態。これにより、count プロパティのないレコード(ゼロステップと解釈される)が返されます。
  • 手首から外している期間: ユーザーがデバイスを装着していない期間。この場合、レコードが返されず、データのギャップが大きくなります。

詳細については、データの存在と真のゼロに関するガイドをご覧ください。