لنقل البيانات من واجهة Fitbit Web API القديمة إلى Google Health API، عليك الانتقال من مكتبات OAuth2 العامة إلى Google Auth Library. في ما يلي اقتراح بشأن التصميم وتنفيذ رمز زائف مكتوب بلغة 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-Identity) |
| نقطة نهاية الرمز المميز | 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 بدلاً من عرض رسالة خطأ.