L'API Google Health è una nuova API creata da zero che consente agli sviluppatori di eseguire query sui dati utente di Fitbit. Non si tratta solo di un aggiornamento, ma di una mossa strategica per garantire che le tue app siano sicure, affidabili e pronte per i futuri progressi della tecnologia sanitaria. L'API supporta una nuova console per registrare le tue app, il supporto di Google OAuth 2.0, nuovi tipi di dati, nuovi schemi degli endpoint e un nuovo formato di risposta.
La guida è progettata per aiutare gli sviluppatori a eseguire la migrazione delle app API Fitbit Web esistenti alla nuova API Google Health.
Perché eseguire la migrazione?
I vantaggi dell'utilizzo dell'API Google Health sono:
- Sicurezza avanzata: conformità alle best practice di Google in materia di sicurezza, in linea con gli standard di Google per sicurezza, privacy e identità.
- Coerenza: elimina le incoerenze legacy nei formati dei dati, nei fusi orari, nelle unità di misura e nella gestione degli errori per un'esperienza di sviluppo più intuitiva.
- Scalabilità e a prova di futuro: progettato per scalare in modo da soddisfare le esigenze future e supporta protocolli moderni come gRPC.
Registrazione app
Tutte le app API Google Health devono essere registrate utilizzando la console Google Cloud, che funge da hub centrale per la gestione di tutte le tue app Google.
Per istruzioni su come registrare l'app, segui i passaggi descritti in Guida introduttiva. Ecco le differenze che noterai durante la registrazione delle tue app.
| API Fitbit Web | API Google Health | |
| Link pubblico/i | https://dev.fitbit.com/apps | https://console.cloud.google.com |
| Aggiunta di una nuova app | Premi Registra una nuova app. |
|
| Informazioni di base | Campi da compilare:
|
Campi da compilare:
|
| Tipi di applicazioni | Uno sviluppatore è tenuto a selezionare:
|
|
| ID client | Registrato quando le impostazioni dell'applicazione vengono salvate | Registrato separatamente |
| Tipo di accesso | L'accesso in lettura e scrittura è controllato a livello di app | L'accesso in lettura e scrittura è controllato a livello di ambito |
| URL aggiuntivi |
|
|
Implementazione di OAuth
Le app API Google Health supportano solo le librerie client Google OAuth2. Le librerie client sono disponibili per i framework più comuni, il che semplifica l'implementazione di OAuth 2.0. Di seguito sono riportate le differenze tra le librerie Google OAuth2 e le librerie OAuth2 open source:
| API Fitbit Web | API Google Health | |
| Supporto della libreria OAuth2 | Open source | Librerie client Google OAuth2 |
| Funzionalità | Incoerenza tra le piattaforme | Coerenza tra le piattaforme |
| URL di autorizzazione | https://www.fitbit.com/oauth2/authorize | https://accounts.google.com/o/oauth2/v2/auth |
| URL del token | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Durata del token di accesso | 8 ore | 1 ora |
| Dimensione token di accesso | 1024 byte | 2048 byte |
| Aggiorna token | I token di aggiornamento vengono generati quando si utilizza il flusso di concessione del codice di autorizzazione. Per un utente può essere generato un solo token di aggiornamento. I token non scadono mai e possono essere utilizzati una sola volta. | Per generare un token di aggiornamento, la stringa di autorizzazione deve contenere il parametro di query "access_type=offline". È possibile creare più token di aggiornamento per un singolo utente. I token di aggiornamento possono essere basati sul tempo. Scadranno se non vengono utilizzati per 6 mesi, se l'utente ha concesso l'accesso in base al tempo o se l'app è in modalità "Test". Per maggiori dettagli, vedi Scadenza del token di aggiornamento. |
| Token Response | La risposta JSON contiene:
|
La risposta JSON contiene:
Per ottenere l'ID utente, utilizza l'endpoint users.getIdentity. |
Nuova autenticazione utente (nuovo consenso obbligatorio)
Gli utenti Fitbit devono dare nuovamente il consenso alla nuova integrazione perché la tua app utilizza una libreria OAuth diversa. Non è possibile trasferire e utilizzare i token di accesso e i token di aggiornamento nell'API Google Health.
Ambiti
Devi aggiornare la richiesta di autorizzazione per utilizzare gli ambiti dell'API Google Health. Gli ambiti definiscono se la tua app supporta le operazioni di lettura o scrittura. Non utilizzare ambiti non necessari per la tua app. Puoi sempre aggiungere altri ambiti in un secondo momento se il design dell'app cambia.
Gli ambiti dell'API Google Health sono un URL HTTP che inizia con https://www.googleapis.com/auth/googlehealth.{scope}. Ad esempio, https://www.googleapis.com/auth/googlehealth.activity_and_fitness.
Mappature degli ambiti
Ecco come gli ambiti dell'API Fitbit Web corrispondono agli ambiti dell'API Google Health:
| Ambiti dell'API Fitbit Web | Ambiti API Google Health |
|---|---|
| attività | .activity_and_fitness .activity_and_fitness.readonly |
| cardio_fitness | .activity_and_fitness .activity_and_fitness.readonly |
| battito cardiaco | .health_metrics_and_measurements .health_metrics_and_measurements.readonly |
| località | .location.readonly |
| alimentazione | .nutrition .nutrition.readonly |
| oxygen_saturation | .health_metrics_and_measurements .health_metrics_and_measurements.readonly |
| profilo | .profile .profile.readonly |
| respiratory_rate | .health_metrics_and_measurements .health_metrics_and_measurements.readonly |
| impostazioni | .settings .settings.readonly |
| sonno | .sleep .sleep.readonly |
| temperatura | .health_metrics_and_measurements .health_metrics_and_measurements.readonly |
| peso | .health_metrics_and_measurements .health_metrics_and_measurements.readonly |
Tipi di dati
Di seguito è riportato un elenco dei tipi di dati dell'API Google Health e della loro mappatura all'API Fitbit Web.
| Tipo di dati dell'API Fitbit Web | Tipo di dati API Google Health ID endpoint |
|---|---|
| Minuti in zona attiva | Minuti in zona attivaactive-zone-minutes
|
| Contiene modifiche ai livelli di attività dell'utente | Livello di attivitàactivity-level
|
| Elevazione | Altitudinealtitude
|
| Grasso corporeo | Grasso corporeobody-fat
|
caloriesOut in ogni zona del battito cardiaco |
Calorie nella zona battito cardiacocalories-in-heart-rate-zone
|
| Riepilogo HRV | Variabilità del battito cardiaco giornalieradaily-heart-rate-variability
|
| Riepilogo SpO2 | Saturazione di ossigeno giornalieradaily-oxygen-saturation
|
| Battito cardiaco a riposo | Battito cardiaco a riposo giornalierodaily-resting-heart-rate
|
| Temperatura cutanea | Derivazioni della temperatura del sonno giornalieradaily-sleep-temperature-derivations
|
| Distanza | Distanzadistance
|
| Attività registrata | Allenamentoexercise
|
| Piani | Pianifloors
|
| Frequenza cardiaca | Battito cardiacoheart-rate
|
| HRV infragiornaliero | Variabilità del battito cardiacoheart-rate-variability
|
| SpO2 infragiornaliero | Saturazione di ossigenooxygen-saturation
|
| Valore VO2 max quando l'utente corre | VO2 max corsarun-vo2-max
|
| Serie temporale di minuti di attività sedentaria | Periodo sedentariosedentary-period
|
| Sonno | Sonnosleep
|
| Passaggi | Passaggisteps
|
Attività caloriesOut |
Calorie totalitotal-calories
|
| Valore VO2 max | VO2 maxvo2-max
|
| Peso | Pesoweight
|
Endpoint
Gli endpoint REST adottano una sintassi coerente per tutti i tipi di dati.
- Endpoint di servizio: l'URL HTTP di base cambia in https://health.googleapis.com.
- Sintassi dell'endpoint: l'API Google Health supporta un numero limitato di endpoint, che possono essere utilizzati dalla maggior parte dei tipi di dati supportati. In questo modo viene fornita una sintassi coerente per tutti i tipi di dati e gli endpoint sono più facili da usare.
- Identificatore utente: nella sintassi dell'endpoint deve essere specificato l'ID utente o me. Quando mi utilizzi, lo User-ID viene dedotto dal token di accesso.
Esempio: ecco un esempio dell'endpoint GET Profile chiamato utilizzando l'API Google Health
GET https://health.googleapis.com/v4/users/me/profile
Mapping degli endpoint
Consulta la tabella Disponibilità dei tipi di dati per un elenco dei tipi di dati disponibili e dei metodi API che supportano.
| Tipo di endpoint API Fitbit Web | API Google Health |
| GET (Log | Summary | Daily Summary) in cui richiedi un singolo giorno di dati | Metodo dailyRollup con windowSize = 1 giorno |
| GET (infragiornaliero) in cui richiedi dati granulari | Metodo list |
| GET (Time Series) by Date or Interval | Metodo rollUp o dailyRollUp che include un intervallo di date |
| GET (elenco log) | Metodo list |
| CREARE E AGGIORNARE i log | Metodo patch |
| DELETE Logs | Metodo batchDelete |
| GET Profile | users.getProfile restituisce le informazioni specifiche dell'utente
users.getSettings restituisce le unità e i fusi orari dell'utente |
| AGGIORNA Profilo | users.updateProfile modifica le informazioni specifiche dell'utente
users.updateSettings modifica le unità e i fusi orari dell'utente |
| Recuperare l'ID utente | users.getIdentity restituisce l'ID utente legacy di Fitbit e Google dell'utente. |
Eseguire la migrazione degli utenti
La migrazione dall'API Fitbit Web all'API Google Health è più di un aggiornamento tecnico. I tuoi utenti devono dare nuovamente il consenso alla nuova integrazione a causa della modifica della libreria OAuth. Non è possibile trasferire e utilizzare i token di accesso e di aggiornamento nell'API Google Health. Per favorire la fidelizzazione degli utenti durante la migrazione, ecco alcuni suggerimenti tecnici e strategici per una migrazione riuscita.
Strategia a doppia libreria
Poiché l'API Fitbit Web e l'API Google Health utilizzano librerie OAuth2 diverse, devi gestire un periodo di "bridging" in cui entrambe le librerie esistono nel tuo codebase.
Parallel Authorization Management
- Encapsulate Clients: crea un livello di astrazione o un'interfaccia per il tuo "servizio sanitario". In questo modo, il resto dell'app può richiedere dati senza sapere quale libreria (OAuth Fitbit o OAuth Google) è attiva per quello specifico utente.
- Aggiornamento dello schema del database: aggiorna la tabella degli utenti in modo che includa un
flag
oauth_type. Ad esempio, usafitbitper Fitbit OAuth egoogleper Google OAuth.- Nuovi utenti: impostazione predefinita dell'API Google Health e della libreria Google OAuth. Imposta
oauth_typesugoogle. - Utenti esistenti: continua a utilizzare l'API Fitbit Web fino al completamento
del flusso di consenso. Imposta
oauth_typesufitbit.
- Nuovi utenti: impostazione predefinita dell'API Google Health e della libreria Google OAuth. Imposta
Flusso di riacquisizione del consenso "Step-Up"
Invece di forzare la disconnessione, utilizza un approccio di autorizzazione incrementale:
- Rileva token open source Fitbit: quando un utente dell'API Fitbit Web apre l'app, attiva una notifica "Aggiornamento del servizio".
- Avvia il flusso OAuth di Google: quando l'utente fa clic su "Aggiorna", avvia il flusso della libreria OAuth2 di Google.
- Sostituisci e revoca: una volta ricevuto correttamente il token Google OAuth, salvalo nel profilo utente, aggiorna
oauth_typedafitbitagooglee (se possibile) revoca a livello di programmazione il vecchio tokenfitbitper mantenere pulito il profilo di sicurezza dell'utente.
Massimizzare la fidelizzazione degli utenti
Il nuovo consenso è la "zona di pericolo" per l'abbandono. Per evitare che gli utenti abbandonino l'app, segui queste best practice UX:
Comunicazione "Value-First"
Non iniziare con "Abbiamo aggiornato la nostra API". Inizia con i vantaggi del nuovo sistema supportato da Google:
- Sicurezza avanzata: menziona la protezione dell'account leader del settore di Google e l'autenticazione a due fattori.
- Affidabilità: tempi di sincronizzazione più rapidi e connessioni dati più stabili.
- Feature Gating: informa gli utenti che i nuovi tipi di dati e le nuove funzionalità richiedono l'aggiornamento.
Smart Timing
- Non interrompere le attività di alto valore: non attivare mai la schermata di riacquisizione del consenso mentre un utente si sta allenando o sta registrando il cibo.
- Fase "Sollecito": per i primi 30 giorni, utilizza un banner chiudibile.
- Fase di "interruzione definitiva": rendi obbligatorio il nuovo consenso solo dopo diverse settimane di avvisi, in concomitanza con le scadenze ufficiali di ritiro dell'API Fitbit Web.
Confronto del flusso di migrazione
Una chiara distinzione visiva tra i flussi precedenti e quelli nuovi aiuta gli sviluppatori a capire dove si dirama la logica.
| Funzionalità | API Fitbit Web (legacy) | API Google Health (Google-Identity) |
| Libreria di autenticazione | Standard open source | Servizi di identità Google (GIS) / Google Auth |
| Account utente | Credenziali legacy di Fitbit | Account Google |
| Tipo di token | Accesso / aggiornamento specifico per Fitbit | Token di accesso/aggiornamento emessi da Google |
| Gestione dell'ambito | Autorizzazioni generiche | Autorizzazioni granulari / incrementali |
Gestire le sfumature della migrazione dell'account
Secondo la documentazione di Fitbit, gli utenti che eseguono la migrazione del proprio account a Google in genere non perdono immediatamente le connessioni di terze parti, ma la modifica della versione dell'API è un requisito lato sviluppatore.
- Controlla la validità del token: utilizza un backgroundworker per verificare se i token Fitbit non funzionano e restituiscono errori "Non autorizzato". Ciò potrebbe indicare che l'utente ha eseguito la migrazione del proprio account, ma la tua app non è ancora aggiornata.
- Errori controllati: se una chiamata OAuth di Fitbit non va a buon fine, reindirizza l'utente a una pagina personalizzata "Riconnetti Fitbit" che utilizza in modo specifico il nuovo flusso OAuth di Google.
Codice di esempio
Per eseguire la migrazione dalla precedente API Fitbit Web all'API Google Health, passerai dalle librerie OAuth2 generali alla libreria Google Auth. Di seguito è riportato un suggerimento di architettura e un'implementazione di pseudocodice scritta in JavaScript per gestire questo stato di "doppia libreria".
1. "Middleware Switch"
Poiché non puoi eseguire la migrazione di tutti gli utenti contemporaneamente, il backend deve determinare
quale libreria utilizzare in base all'attuale apiVersion dell'utente memorizzato nel tuo
database.
Implementazione
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. Esegui la migrazione del flusso UX
Per massimizzare la fidelizzazione, utilizza un pattern "Interrompi e aggiorna". In questo modo, l'utente non è costretto a eseguire nuovamente l'accesso finché non interagisce con l'app.
Logica di reindirizzamento
Quando un utente dell'API Fitbit Web accede a una funzionalità specifica, attiva la migrazione:
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. Transizioni tecniche chiave
Quando scrivi gli script di migrazione JavaScript, tieni presente queste differenze:
| Funzionalità | API Fitbit Web (legacy) | API Google Health (Google-Identity) |
| Endpoint token | https://api.fitbit.com/oauth2/token | https://oauth2.googleapis.com/token |
| Libreria di autenticazione | Standard open source | Google Auth |
| Ambito | attività | https://www.googleapis.com/auth/googlehealth.activity_and_fitness |
| ID utente | ID codificato Fitbit restituito nella risposta /oauth2/token | User-ID restituito dall'endpoint users.getIdentity |
4. Elenco di controllo per la fidelizzazione
- Persistenza della sessione: non cancellare la vecchia sessione dell'API Fitbit Web finché l'access_token dell'API Google Health non viene verificato e salvato nel tuo database.
- Revoca automatica: una volta completata la migrazione dell'API Google Health, utilizza una richiesta POST all'endpoint di revoca Fitbit legacy: https://api.fitbit.com/oauth2/revoke. In questo modo l'utente non vedrà autorizzazioni app "duplicate" nelle impostazioni di Fitbit.
- Gestione degli errori: se una chiamata Fitbit restituisce un errore 401 Unauthorized, reindirizza automaticamente al flusso OAuth di Google anziché mostrare un messaggio di errore.