The Google Fit to Health Connect migration means replacing every Fit API call in your Capacitor app with Health Connect on Android, and with HealthKit on iOS if you ship there too. Google stopped new Fit sign-ups on May 1, 2024, and supports the Fit APIs only until the end of 2026. This guide maps Fit data types and calls to Health Connect, shows the replacement code with @capgo/capacitor-healthGoogle Fitの非推奨化のタイムライン
Martin Donadieu
| 日付 | 何が起こったか |
|---|---|
| 2024年5月1日 | Google Fit APIの新規開発者登録なし |
| 2024年から2026年 | 既存のFit統合は正常に動作し、Googleは開発者をHealth Connectに導く |
| 2026 | Fit API、REST APIを含む、は廃止 |
| 2026年末 | サポートの終了。Googleは正確な閉鎖日を公開していません |
Googleの移行FAQによると、Fit REST APIと同じ形状の代替はありません: オンデバイスアプリはHealth Connectに移行し、クラウド統合はGoogle Health APIに移行します。 どこかで厳密な閉鎖日が引用されている場合は、GoogleのFAQを確認して計画を立てる前に確認してください。
Health Connectへの移行で何が変わりますか
| Google Fit | Health Connect | |
|---|---|---|
| データの場所 | Googleアカウント、クラウド | デバイス上 |
| 認証 | OAuth 2.0でフィットネススコープ、Googleサインイン | Androidランタイムパーミッション、データタイプごとに |
| セットアップ | クラウドプロジェクト、OAuthクライアント、SHA-1指紋 | マニフェストパーミッション、プライバシーポリシースクリーン |
| 利用可能性 | Playサービスを搭載した任意のAndroidデバイス | Android 14+に組み込まれているが、古いバージョンのAndroidではGoogle Playのアプリ |
| 履歴 | フルアカウント履歴 | デフォルトでは30日以内、古いデータは READ_HEALTH_DATA_HISTORY |
| Web/サーバーへのアクセス | REST API | None (Google Health APIをクラウドで使用) |
| iOS | サポートされていません | サポートされていません。HealthKitを使用してください |
| ストアレビュー | 機密スコープのOAuth検証 | Play Console Health Connect の申告 |
最も大きな製品変更は、デバイス中心モデルのことです。 1 つの電話に Health Connect データが表示されると、別の電話では表示されません。 アプリがデバイス間で履歴を表示する場合、読み取りを自分のバックエンドに同期してください。
Fit データの種類を Health Connect にマップする
| Google Fit データの種類 | Health Connect のレコード | @capgo/capacitor-health 種類 |
|---|---|---|
com.google.step_count.delta |
StepsRecord |
steps |
com.google.distance.delta |
DistanceRecord |
distance |
com.google.calories.expended |
TotalCaloriesBurnedRecord / ActiveCaloriesBurnedRecord |
totalCalories / calories |
com.google.calories.bmr |
BasalMetabolicRateRecord |
basalCalories |
com.google.heart_rate.bpm |
HeartRateRecord |
heartRate |
com.google.weight |
WeightRecord |
weight |
com.google.height |
HeightRecord |
height |
com.google.body.fat.percentage |
BodyFatRecord |
bodyFat |
com.google.sleep.segment |
SleepSessionRecord 段階と共に (エネルギーのみ) |
sleep |
com.google.oxygen_saturation |
OxygenSaturationRecord |
oxygenSaturation |
com.google.blood_pressure |
BloodPressureRecord |
bloodPressure |
com.google.blood_glucose |
BloodGlucoseRecord |
bloodGlucose |
com.google.body.temperature |
BodyTemperatureRecord |
bodyTemperature |
com.google.hydration |
HydrationRecord |
dietaryWater |
com.google.nutrition |
NutritionRecord |
dietaryEnergyConsumed セッション (読み取り用) __CAPGO_KEEP_0__ |
com.google.activity.segment and Sessions API |
ExerciseSessionRecord |
workouts 心拍数ポイント queryWorkouts) |
心拍数ポイント
- セッション (
com.google.heart_minutes) と Move Minutes (com.google.active_minutes) は Google Fit のスコアでした。 Health Connect には、スコアではなく、raw データが格納されます。 心拍数と運動セッションから独自の指標を計算してください。 - アクティビティサンプル 1秒間隔でアクティビティタイプが含まれるサンプルは、エクササイズセッションにセグメントが含まれるものに置き換えられます。
- 位置サンプル 運動中の位置データは Health Connect に格納され、別の許可が必要になり、プラグインによって公開されません。
ExerciseRouteペダル回数、速度、パワー - Health Connect に存在します ( ) ですが、プラグインのタイプによってカバーされていません。 それらに依存している場合、最速のパスは小さなカスタムネイティブメソッドです。
StepsCadenceRecord,SpeedRecord,PowerRecord書き込み前にアクセスログを確認してください __CAPGO_KEEP_0__: すべての
Auditする前に書く前に code: すべての DataType と、すべてのAPIを呼び出します (History、Recording、Sessions、Sensors、Config、REST)、それぞれをマップ、再計算、またはドロップとしてマークします。
ステップ 1: Google Fit を削除
Android プロジェクトから Fit 統合を削除し、JavaScript:
- Remove
com.google.android.gms:play-services-fitness削除play-services-authfrombuild.gradle. - から
- 古いコミュニティのGoogle Fit Capacitor プラグインをアンインストールし、次に実行
bunx cap sync.
古いコミュニティの Google Fit code プラグインをアンインストールし、次に新しいバージョンがライブになるまで、ブランチに Fit code を残しておきます。そうすることで、ユーザーが過去のデータをエクスポートすることを要求した場合に、データをエクスポートできます。
ステップ 2: ヘルス プラグインをインストール
bun add @capgo/capacitor-health
bunx cap sync
@capgo/capacitor-health サポートする Capacitor 8は、AndroidではHealth Connect、iOSではHealthKitを使用し、Androidには必要です。 minSdk 26.
Capacitor 8 をサポートし、Android では Health Connect、iOS では HealthKit を使用し、Android では __CAPGO_KEEP_0__ が必要です。
プラグインは、サポートされているタイプのHealth Connectの読み取りと書き込みの権限を、manifestに統合します。また、Health Connectパッケージのエントリと許可の理由アクティビティも含まれます。 <queries> Health Connectパッケージのエントリと許可の理由アクティビティのエントリを含むmanifestに、プラグインはサポートされているタイプのHealth Connectの読み取りと書き込みの権限を統合します。
- プライバシーポリシーを提供する必要があります。 Health Connectは許可シートからプライバシーポリシーを開きます。許可シートに追加する、またはURLを設定する必要があります。
android/app/src/main/assets/public/privacypolicy.html許可をトリミングする。android/app/src/main/res/values/strings.xml:
<string name="health_connect_privacy_policy_url">https://example.com/privacy</string>
- Google PlayはHealth Connectの許可をすべて確認します。歩数と心拍数のみを読み取る場合は、他の許可を削除してください。 必要に応じて、履歴へのアクセスを追加します。
tools:node="remove":
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_GLUCOSE"
tools:node="remove" />
- Health Connectは、ユーザーが許可を与えるまで、読み取りを約30日間で制限します。 iOS設定
READ_HEALTH_DATA_HISTORY:
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_HISTORY" />
iOS セットアップ
ステップ3: 利用可能性を確認する Info.plist:
<key>NSHealthShareUsageDescription</key>
<string>Show your steps and workouts in the app.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Save the workouts you record in the app.</string>
ステップ3: 利用可能性を確認する
Google FitはPlayサービスが存在する場所で動作しました。Health ConnectはAndroid 13以下または古いバージョンでは欠落しているか、またはアップデートが必要です。
import { Health } from '@capgo/capacitor-health';
export async function ensureHealthAvailable() {
const result = await Health.isAvailable();
if (result.available) return true;
// On Android, send the user to install or update Health Connect
if (result.platform === 'android') {
await Health.openHealthConnectSettings();
}
console.warn('Health store unavailable:', result.reason);
return false;
}
ユーザーがHealth Connectについて知らなかった場合、Playストアが自動的に開かれると混乱するので、短い説明画面を表示してリダイレクトすること。
ステップ 4: OAuthを許可に置き換えます
ステップ 5: History __CAPGO_KEEP_0__ の読み取りを置き換えます
const status = await Health.requestAuthorization({
read: ['steps', 'distance', 'calories', 'heartRate', 'sleep', 'workouts'],
write: ['weight'],
requestHistoryAccess: true, // Android only
});
if (status.readDenied.length > 0) {
// explain what will not work and offer openHealthConnectSettings()
}
if (status.historyAccessAvailable === false) {
// provider too old: only the last 30 days are readable
}
フィットフローは、Google Sign-In、フィットネススコープの要求、APIの呼び出しでした。新しいフローは、単一の許可シートです。 checkAuthorization 許可はデータタイプごとで、ユーザーは任意のサブセットを許可できます。
ステップ 5: History API を読み取る
フィット readData フィット readSamples:
const end = new Date();
const start = new Date(end.getTime() - 24 * 60 * 60 * 1000);
const { samples } = await Health.readSamples({
dataType: 'heartRate',
startDate: start.toISOString(),
endDate: end.toISOString(),
limit: 500,
ascending: true,
});
for (const s of samples) {
console.log(s.startDate, s.value, s.unit, s.sourceName, s.deviceType);
}
sourceName rawサンプルの呼び出しは deviceType (watch, phone, chestStrapそして、Androidでは
ステップ 6: バケット化された読み取りと集計読み取りを置き換え
Fit’s bucketByTime plus aggregate always queryAggregated:
const { samples: daily } = await Health.queryAggregated({
dataType: 'steps',
startDate: new Date(Date.now() - 7 * 86_400_000).toISOString(),
endDate: new Date().toISOString(),
bucket: 'day', // 'hour' | 'day' | 'week' | 'month'
aggregation: 'sum',
});
const { samples: hr } = await Health.queryAggregated({
dataType: 'heartRate',
bucket: 'hour',
aggregation: ['min', 'average', 'max'],
startDate: new Date(Date.now() - 86_400_000).toISOString(),
endDate: new Date().toISOString(),
});
// hr[i].values.min, hr[i].values.average, hr[i].values.max
steps
Step 7: セッションを置き換えます API
Health Connect
const { workouts, anchor } = await Health.queryWorkouts({
workoutType: 'running',
startDate: new Date(Date.now() - 30 * 86_400_000).toISOString(),
endDate: new Date().toISOString(),
limit: 50,
});
for (const w of workouts) {
console.log(w.workoutType, w.duration, w.totalDistance, w.totalEnergyBurned);
}
// pass `anchor` back to fetch the next page
deduplicates workouts in read data ExerciseSessionRecord.
several apps
Fit’s insertData always saveSample:
await Health.saveSample({
dataType: 'weight',
value: 72.4, // kilograms
startDate: new Date().toISOString(),
});
await Health.saveSample({
dataType: 'bloodPressure',
value: 120,
systolic: 120,
diastolic: 80,
startDate: new Date().toISOString(),
});
値は、各タイプのデフォルト単位(キログラム、メートル、キロカロリー、心拍数)を使用する必要があります。 metadata オプションは、Health Connectによって無視されます。
ステップ9:Google Playレビューを通過する
Health Connectの許可が必要な場合、追加のレビューが必要になります。
- Play Consoleで開きます。 アプリの内容 Play Consoleで 健康アプリ 申告書とHealth Connectの許可フォームを完了する必要があります。許可を求めるたびに、許可の理由を説明する必要があります。
- プライバシーポリシーがPlay ConsoleとHealth Connectのシートで説明する健康データの使用を含むことを確認する必要があります。
- データの安全性 更新 健康とフィットネスデータ、収集されたものや共有されたものを問わず。
- 許可された権限のみを宣言したビルドを提出する。追加で宣言された権限は、最も一般的な拒否理由です。
正常のアップデートよりも長い時間を要する予定のレビューを計画する。未関連の機能と混ぜてはならないため、移行を独自のリリースとして発行する。
ステップ10:ユーザーの期待を移行する
- ユーザーは、現在の履歴はHealth Connectから取得され、履歴へのアクセスを許可するまで、30日以内に古いデータが制限されます。
- あなたのアプリが Fit をクラウド同期として使用している場合、現在はその責任をバックエンドに移行してください。
- Android上の「Google Fitを接続」ボタンを削除し、「Health Connectを接続」にAndroid、iOSの「Apple Healthを接続」に変更する。
トラブルシューティング
isAvailable() Android 13 で false を返します。: にはインストールされていませんまたは古くなっています。 openHealthConnectSettings().
許可シートは表示されません。許可はマージされたマニフェストに記載されていません、または削除しました tools:node="remove". 確認 android/app/build/intermediates/merged_manifests.
30 日間のみ返却: リクエスト requestHistoryAccess: true と宣言 READ_HEALTH_DATA_HISTORY.
ステップの合計は Google Fit よりも高くなりますコンテキスト: About Capgo ページ。役割: UI ラベル。表示される場所: about.astro ページ。メッセージキー `about_how_step_label` (About How Step Label)。 queryAggregated.
: raw サンプルを合計します。使用iOS では空の結果
: データが存在しない場合または読み取り権限が拒否されている場合です。HealthKit はどちらも通知しません。Play Console がアップデートを拒否
: 未宣言または不正当な Health Connect 権限を削除し、再提出する際に明確な理由を示してください。
段階的に移行を実行することにより、 Capgo ライブアップデート 新しいフローをテストする間、ユーザーは新しいフローをテストします。ライブセンサーデータも読む場合は、 Capacitor で心拍数モニターを作るためのガイドをご覧ください。、そして 各データタイプのドキュメント。 著者名