Implementação de exemplo

Para migrar da API Fitbit Web legada para a API Google Health, você vai passar das bibliotecas OAuth2 gerais para a biblioteca de autenticação do Google. A seguir, há uma sugestão de arquitetura e uma implementação de pseudocódigo escrita em JavaScript para processar esse estado de "biblioteca dupla".

1. A "chave de middleware"

Como não é possível migrar todos os usuários de uma só vez, o back-end precisa determinar qual biblioteca usar com base na apiVersion atual do usuário armazenada no seu banco de dados.

Implementação

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. Migrar o fluxo da UX

Para maximizar a retenção, use um padrão de "interrupção e upgrade". Isso garante que o usuário não seja forçado a fazer login novamente até que já esteja envolvido com o app.

Lógica de redirecionamento

Quando um usuário da API Fitbit Web acessa um recurso específico, acione a migração:

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. Principais transições técnicas

Ao escrever seus scripts de migração do JavaScript, tenha em mente estas diferenças:

Recurso API Fitbit Web (legada) API Google Health (identidade do Google)
Endpoint do token https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
Biblioteca de autenticação Padrão de código aberto Autenticação do Google
Escopo atividade https://www.googleapis.com/auth/googlehealth.activity_and_fitness
ID do usuário ID codificado do Fitbit retornado na resposta /oauth2/token ID do usuário retornado do endpoint users.getIdentity

4. Lista de verificação de retenção

  • Persistência da sessão: não limpe a sessão antiga da API Fitbit Web do usuário até que o access_token da API Google Health seja verificado e salvo no seu banco de dados.
  • Revogação automática: quando a migração da API Google Health for concluída, use uma solicitação POST para o endpoint de revogação do Fitbit legado: https://api.fitbit.com/oauth2/revoke. Isso garante que o usuário não veja permissões do app "duplicadas" nas configurações do Fitbit.
  • Tratamento de erros: se uma chamada do Fitbit retornar um erro 401 não autorizado, redirecione automaticamente para o fluxo do OAuth do Google em vez de mostrar uma mensagem de erro.