للانتقال من واجهة Fitbit Web API القديمة إلى Google Health API، عليك الانتقال من مكتبات OAuth2 العامة إلى مكتبة Google Auth. في ما يلي اقتراح معماري وتنفيذ برمز زائف مكتوب بلغة 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، ضَع في اعتبارك نقاط الاختلاف التالية:
| الميزة | واجهة Fitbit Web API (قديمة) | Google Health API (هوية Google) |
| نقطة نهاية الرمز المميز | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| مكتبة المصادقة | مصدر مفتوح عادي | Google Auth |
| النطاق | النشاط | 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 بدلاً من عرض رسالة خطأ.