Aby przejść z dotychczasowego interfejsu Fitbit Web API na interfejs Google Health API, musisz zmienić ogólne biblioteki OAuth2 na bibliotekę Google Auth. Poniżej znajdziesz sugestię dotyczącą architektury i implementację pseudokodu w języku JavaScript, która pozwoli Ci obsługiwać ten stan „podwójnej biblioteki”.
1. „Przełącznik oprogramowania pośredniczącego”
Ponieważ nie możesz przenieść wszystkich użytkowników naraz, backend musi określić, której biblioteki użyć, na podstawie bieżącego parametru apiVersion użytkownika przechowywanego w Twojej bazie danych.
Implementacja
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. Migracja przepływu UX
Aby zmaksymalizować utrzymanie użytkowników, użyj wzorca „Przerwij i uaktualnij”. Dzięki temu użytkownik nie będzie musiał ponownie się logować, dopóki nie zacznie korzystać z aplikacji.
Logika przekierowania
Gdy użytkownik interfejsu Fitbit Web API korzysta z określonej funkcji, uruchom migrację:
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. Najważniejsze zmiany techniczne
Podczas pisania skryptów migracji w JavaScript pamiętaj o tych różnicach:
| Funkcja | Fitbit Web API (starsza wersja) | Google Health API (Google-Identity) |
| Token Endpoint (Punkt końcowy tokena) | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Biblioteka uwierzytelniania | Standardowa biblioteka open source | Google Auth |
| Zakres | aktywność | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| Identyfikator użytkownika | Zakodowany identyfikator Fitbit zwrócony w odpowiedzi /oauth2/token | Identyfikator użytkownika zwrócony z punktu końcowego users.getIdentity |
4. Lista kontrolna utrzymania użytkowników
- Trwałość sesji: nie czyść starej sesji użytkownika w interfejsie Fitbit Web API dopóki token access_token interfejsu Google Health API nie zostanie zweryfikowany i zapisany w Twojej bazie danych.
- Automatyczne unieważnienie: po zakończeniu migracji do interfejsu Google Health API użyj żądania POST do starszego punktu końcowego unieważnienia Fitbit: https://api.fitbit.com/oauth2/revoke. Dzięki temu użytkownik nie będzie widzieć „zduplikowanych” uprawnień aplikacji w ustawieniach Fitbit.
- Obsługa błędów: jeśli wywołanie Fitbit zwróci kod 401 Unauthorized, automatycznie przekieruj użytkownika do przepływu Google OAuth zamiast wyświetlać komunikat o błędzie.