Contoh implementasi

Untuk bermigrasi dari Fitbit Web API lama ke Google Health API, Anda akan berpindah dari library OAuth2 umum ke Google Auth Library. Berikut adalah saran arsitektur dan penerapan pseudo-code yang ditulis dalam Javascript untuk menangani status "Dual-Library" ini.

1. "Pengalihan Middleware"

Karena Anda tidak dapat memigrasikan semua pengguna sekaligus, backend Anda perlu menentukan library mana yang akan digunakan berdasarkan apiVersion pengguna saat ini yang disimpan di database Anda.

Penerapan

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. Memigrasikan alur UX

Untuk memaksimalkan retensi, gunakan pola "Interrupt-and-Upgrade". Hal ini memastikan pengguna tidak dipaksa untuk login ulang hingga mereka sudah berinteraksi dengan aplikasi.

Logika pengalihan

Saat pengguna Fitbit Web API mengakses fitur tertentu, picu migrasi:

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. Transisi teknis utama

Saat menulis skrip migrasi JavaScript, perhatikan perbedaan berikut:

Fitur Fitbit Web API (Legacy) Google Health API (Google-Identity)
Token Endpoint https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
Auth Library Open Source Standar Autentikasi Google
Cakupan aktivitas https://www.googleapis.com/auth/googlehealth.activity_and_fitness
ID Pengguna ID yang Dikodekan Fitbit ditampilkan dalam respons /oauth2/token ID pengguna yang ditampilkan dari endpoint users.getIdentity

4. Checklist retensi

  • Persistensi Sesi: Jangan hapus sesi Fitbit Web API lama pengguna hingga access_token Google Health API berhasil diverifikasi dan disimpan ke database Anda.
  • Pencabutan Otomatis: Setelah migrasi Google Health API selesai, gunakan permintaan POST ke endpoint pencabutan Fitbit lama: https://api.fitbit.com/oauth2/revoke. Tindakan ini memastikan pengguna tidak melihat izin aplikasi "duplikat" di setelan Fitbit mereka.
  • Penanganan Error: Jika panggilan Fitbit menampilkan 401 Tidak Sah, alihkan secara otomatis ke alur OAuth Google, bukan menampilkan pesan error.