以前の Fitbit Web API から Google Health API に移行するには、一般的な OAuth2 ライブラリから Google Auth Library に移行します。この「デュアル ライブラリ」状態を処理するためのアーキテクチャの提案と、JavaScript で記述された疑似コードの実装を以下に示します。
1. 「ミドルウェア スイッチ」
すべてのユーザーを一度に移行することはできないため、バックエンドでは、データベースに保存されているユーザーの現在の apiVersion に基づいて、使用するライブラリを決定する必要があります。
実装
const { OAuth2Client } = require('google-auth-library');
const FitbitV1Strategy = require('fitbit-oauth2-library').Strategy;
// 1. Initialize the Google Health API Client
const GHAClient = new OAuth2Client(
process.env.GOOGLE_CLIENT_ID,
process.env.GOOGLE_CLIENT_SECRET,
process.env.REDIRECT_URI
);
// 2. Create a Unified Fetcher
async function fetchSteps(user) {
if (user.apiVersion === 4) {
// ---- GOOGLE OAUTH LIBRARY LOGIC ----
GHAClient.setCredentials({ refresh_token: user.refreshToken });
const url = 'GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints';
const res = await GHAClient.request({ url });
return res.data;
} else {
// ---- FITBIT WEB API LEGACY LOGIC ----
// Use your existing Fitbit open-source library logic here
return callLegacyV1Api(user.accessToken);
}
}
2. UX フローを移行する
保持率を最大化するには、「中断とアップグレード」パターンを使用します。これにより、ユーザーがアプリを操作するまで、再ログインを強制されることはありません。
リダイレクト ロジック
Fitbit Web API ユーザーが特定の機能にアクセスしたときに、移行をトリガーします。
app.get('/dashboard', async (req, res) => {
const user = await db.users.find(req.user.id);
if (user.apiVersion === 1) {
// Render a "soft" migration page explaining the Google transition
return res.render('migrate-to-google', {
title: "Keep your data syncing",
message: "Fitbit is moving to Google accounts. Re-connect now to stay updated."
});
}
const data = await fetchSteps(user);
res.render('dashboard', { data });
});
3. 主な技術移行
JavaScript 移行スクリプトを作成する際は、次の違いに注意してください。
| 機能 | Fitbit Web API(レガシー) | Google Health API(Google-Identity) |
| トークン エンドポイント | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Auth ライブラリ | 標準オープンソース | Google の認証 |
| スコープ | アクティビティ | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| ユーザー ID | /oauth2/token レスポンスで返される Fitbit エンコード ID | users.getIdentity エンドポイントから返されたユーザー ID |
4. 保持のチェックリスト
- セッションの永続性: Google Health API の access_token が正常に検証され、データベースに保存されるまで、ユーザーの古い Fitbit Web API セッションをクリアしないでください。
- 自動取り消し: Google Health API の移行が完了したら、POST リクエストを使用して、以前の Fitbit の取り消しエンドポイント(https://api.fitbit.com/oauth2/revoke)にアクセスします。これにより、Fitbit の設定に「重複した」アプリの権限が表示されなくなります。
- エラー処理: Fitbit の呼び出しで 401 Unauthorized が返された場合、エラー メッセージを表示する代わりに、Google OAuth フローに自動的にリダイレクトします。