כדי לעבור מ-Fitbit Web API מדור קודם אל Google Health API, תצטרכו לעבור מספריות OAuth2 כלליות אל Google Auth Library. בהמשך מוצגת הצעה לארכיטקטורה ומימוש של פסאודו-קוד שנכתב ב-JavaScript כדי לטפל במצב הזה של 'ספרייה כפולה'.
1. האפשרות 'החלפת תוכנת ביניים'
אי אפשר להעביר את כל המשתמשים בבת אחת, ולכן ה-Backend צריך לקבוע באיזו ספרייה להשתמש על סמך 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, חשוב לזכור את ההבדלים האלה:
| תכונה | Fitbit Web API (גרסה קודמת) | Google Health API (Google-Identity) |
| Token Endpoint | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| ספריית אימות | קוד פתוח רגיל | אימות גוגל |
| היקף | פעילות | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| מזהה המשתמש | מזהה מקודד של Fitbit שמוחזר בתגובה של /oauth2/token | מזהה המשתמש שמוחזר מנקודת הקצה users.getIdentity |
4. רשימת משימות לשמירת נתונים
- שמירת נתוני הסשן: אל תנקו את נתוני הסשן הישנים של Fitbit Web API של המשתמש עד שתוודאו ש-access_token של Google Health API אומת ונשמר במסד הנתונים שלכם.
- ביטול אוטומטי: אחרי השלמת ההעברה ל-Google Health API, צריך להשתמש בבקשת POST לנקודת הקצה של ביטול הגישה בגרסה הקודמת של Fitbit: https://api.fitbit.com/oauth2/revoke. כך מוודאים שהמשתמש לא יראה הרשאות שניתנות לאפליקציה 'כפולות' בהגדרות Fitbit.
- טיפול בשגיאות: אם קריאה ל-Fitbit מחזירה 401 Unauthorized, צריך להפנות אוטומטית לזרימת Google OAuth במקום להציג הודעת שגיאה.