Para migrar de la API de Fitbit Web heredada a la API de Google Health, pasarás de las bibliotecas generales de OAuth2 a la biblioteca de autenticación de Google. A continuación, se incluye una sugerencia de arquitectura y una implementación de pseudocódigo escrita en JavaScript para controlar este estado de "biblioteca doble".
1. El "cambio de middleware"
Como no puedes migrar a todos los usuarios a la vez, tu backend debe determinar qué biblioteca usar según la apiVersion actual del usuario almacenada en tu base de datos.
Implementación
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. Migra el flujo de UX
Para maximizar la retención, usa un patrón de "interrupción y actualización". Esto garantiza que el usuario no se vea obligado a volver a acceder hasta que ya esté interactuando con la app.
Lógica de redireccionamiento
Cuando un usuario de la API de Fitbit Web acceda a una función específica, activa la migración:
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. Transiciones técnicas clave
Cuando escribas tus secuencias de comandos de migración de JavaScript, ten en cuenta estas diferencias:
| Función | API de Fitbit Web (heredada) | API de Google Health (Google-Identity) |
| Extremo del token | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Biblioteca de autenticación | Código abierto estándar | Autenticación de Google |
| Alcance | actividad | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| ID de usuario | ID codificado de Fitbit que se muestra en la respuesta /oauth2/token | ID de usuario que se muestra desde el extremo users.getIdentity |
4. Lista de tareas de retención
- Persistencia de la sesión: No borres la sesión anterior de la API de Fitbit Web del usuario hasta que se verifique correctamente el access_token de la API de Google Health y se guarde en tu base de datos.
- Revocación automática: Una vez que se complete la migración de la API de Google Health, usa una solicitud POST al extremo de revocación de Fitbit heredado: https://api.fitbit.com/oauth2/revoke. Esto garantiza que el usuario no vea permisos de la app "duplicados" en su configuración de Fitbit.
- Control de errores: Si una llamada de Fitbit muestra un error 401 Unauthorized, redirecciona automáticamente al flujo de OAuth de Google en lugar de mostrar un mensaje de error.