Ejemplo de implementación

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.