Esempio di implementazione

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.