כדי לעבור מ-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 במקום להציג הודעת שגיאה.