Для перехода с устаревшего веб-API Fitbit на Google Health API вам потребуется перейти от общих библиотек OAuth2 к библиотеке аутентификации Google. Ниже представлено архитектурное предложение и псевдокод, написанный на JavaScript, для обработки этого состояния «двойной библиотеки».
1. «Переключатель промежуточного программного обеспечения»
Поскольку невозможно перенести всех пользователей одновременно, ваш бэкэнд должен определить, какую библиотеку использовать, исходя из текущей apiVersion пользователя, хранящейся в вашей базе данных.
Выполнение
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. Перенести пользовательский интерфейс.
Для максимального удержания пользователей используйте схему «Прерывание и обновление» . Это гарантирует, что пользователю не придется повторно входить в систему, пока он уже не начнет активно использовать приложение.
Логика перенаправления
Когда пользователь Fitbit Web API обращается к определенной функции, запустите миграцию:
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. Ключевые технические переходы
При написании скриптов миграции JavaScript учитывайте следующие различия:
| Особенность | Веб-API Fitbit (устаревшая версия) | API Google Health (Google-Identity) |
| Конечная точка токена | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Библиотека аутентификации | Стандартный открытый исходный код | Аутентификация Google |
| Объем | активность | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| ID пользователя | Идентификатор, закодированный Fitbit, возвращается в ответе /oauth2/token | Идентификатор пользователя, возвращаемый конечной точкой users.getIdentity. |
4. Контрольный список для обеспечения сохранности данных
- Сохранение сессии : Не удаляйте старую сессию пользователя в Fitbit Web API до тех пор, пока access_token Google Health API не будет успешно проверен и сохранен в вашей базе данных.
- Автоматическое аннулирование : После завершения миграции на API Google Health используйте POST-запрос к устаревшей конечной точке аннулирования разрешений Fitbit: https://api.fitbit.com/oauth2/revoke. Это гарантирует, что пользователь не увидит «дублирующиеся» разрешения приложений в настройках Fitbit.
- Обработка ошибок : Если при обращении к Fitbit возвращается ошибка 401 Unauthorized, происходит автоматическое перенаправление на процесс аутентификации Google OAuth вместо отображения сообщения об ошибке.