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.