Per eseguire la migrazione dalla vecchia API Fitbit Web all'API Google Health, dovrai passare dalle librerie OAuth2 generali alla libreria di autenticazione di Google. Di seguito è riportato un suggerimento di architettura e un'implementazione di pseudo-codice scritta in JavaScript per gestire questo stato di "doppia libreria".
1. "Middleware Switch"
Poiché non puoi eseguire la migrazione di tutti gli utenti contemporaneamente, il backend deve determinare quale libreria utilizzare in base all'attuale apiVersion dell'utente memorizzata nel database.
Implementazione
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. Esegui la migrazione del flusso dell'esperienza utente
Per massimizzare la fidelizzazione, utilizza un pattern "Interrupt-and-Upgrade". In questo modo, l'utente non è costretto a eseguire di nuovo l'accesso finché non interagisce con l'app.
Logica di reindirizzamento
Quando un utente dell'API Fitbit Web accede a una funzionalità specifica, attiva la migrazione:
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. Transizioni tecniche chiave
Quando scrivi gli script di migrazione JavaScript, tieni presente queste differenze:
| Funzionalità | API Fitbit Web (legacy) | API Google Health (identità Google) |
| Token Endpoint (Endpoint token) | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Libreria di autenticazione | Open source standard | Autenticazione Google |
| Ambito | attività | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| ID utente | ID codificato Fitbit restituito nella risposta /oauth2/token | ID utente restituito dall'endpoint users.getIdentity |
4. Elenco di controllo per la fidelizzazione
- Persistenza della sessione: non cancellare la vecchia sessione dell'API Fitbit Web dell'utente finché l'access_token dell'API Google Health non viene verificato e salvato correttamente nel database.
- Revoca automatica: al termine della migrazione dell'API Google Health, utilizza una richiesta POST all'endpoint di revoca Fitbit legacy: https://api.fitbit.com/oauth2/revoke. In questo modo, l'utente non vede le autorizzazioni dell'app "duplicate" nelle impostazioni di Fitbit.
- Gestione degli errori: se una chiamata Fitbit restituisce un errore 401 Non autorizzato, reindirizza automaticamente al flusso OAuth di Google anziché mostrare un messaggio di errore.