Örnek uygulama

Eski Fitbit Web API'den Google Health API'ye geçmek için genel OAuth2 kitaplıklarından Google Auth Kitaplığı'na geçmeniz gerekir. Aşağıda, bu "Çift Kitaplık" durumunu işlemek için JavaScript'te yazılmış bir mimari öneri ve sözde kod uygulaması verilmiştir.

1. "Ara Katman Yazılımı Anahtarı"

Tüm kullanıcıları aynı anda taşıyamayacağınız için arka uç sisteminizin, veritabanınızda depolanan kullanıcının mevcut apiVersion değerine göre hangi kitaplığın kullanılacağını belirlemesi gerekir.

Uygulama

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. Kullanıcı deneyimi akışını taşıma

Elde tutma oranını en üst düzeye çıkarmak için "Kesintiye uğrat ve yükselt" modelini kullanın. Bu sayede, kullanıcı uygulamayla etkileşime geçene kadar yeniden giriş yapmaya zorlanmaz.

Yönlendirme mantığı

Bir Fitbit Web API kullanıcısı belirli bir özelliği kullandığında taşıma işlemini tetikleyin:

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. Önemli teknik geçişler

JavaScript taşıma komut dosyalarınızı yazarken aşağıdaki farkları göz önünde bulundurun:

Özellik Fitbit Web API (Eski) Google Health API (Google-Identity)
Jeton uç noktası https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
Auth Library Standart Açık Kaynak Google Auth
Kapsam etkinlik https://www.googleapis.com/auth/googlehealth.activity_and_fitness
Kullanıcı Kimliği /oauth2/token yanıtında döndürülen Fitbit kodlanmış kimliği users.getIdentity uç noktasından döndürülen kullanıcı kimliği

4. Elde tutma kontrol listesi

  • Oturumun Kalıcılığı: Google Health API access_token'ı başarıyla doğrulanıp veritabanınıza kaydedilene kadar kullanıcının eski Fitbit Web API oturumunu temizlemeyin.
  • Otomatik iptal: Google Health API geçişi tamamlandıktan sonra, eski Fitbit iptal uç noktasına bir POST isteği gönderin: https://api.fitbit.com/oauth2/revoke. Bu sayede kullanıcı, Fitbit ayarlarında "yinelenen" uygulama izinleri görmez.
  • Hata İşleme: Bir Fitbit çağrısı 401 Yetkisiz hatası döndürürse hata mesajı göstermek yerine otomatik olarak Google OAuth akışına yönlendirin.