La maggior parte delle app che si integrano con Connessione Salute hanno un proprio datastore che funge da fonte di dati. Connessione Salute ti offre diversi modi per mantenere la tua app sincronizzati.
Assicurati che la tua app:
- Trasferisci i dati nuovi o aggiornati del datastore della tua app a Connessione Salute.
- Recupera le modifiche ai dati da Connessione Salute, che si riflettono nella tua datastore dell'app.
- Elimina i dati da Connessione Salute quando vengono eliminati nel datastore dell'app.
In ogni caso, assicurati che il processo di sincronizzazione conservi sia Connessione Salute sia allineato al datastore dell'app.
Dai un feed di dati a Connessione Salute
La prima parte del processo di sincronizzazione consiste nell'fornire dati dal datastore dell'app al datastore di Connessione Salute.
Prepara i dati
In genere, i record nel datastore dell'app hanno i seguenti dettagli:
- Una chiave univoca, ad esempio
UUID
. - Una versione o un timestamp.
Progetta il datastore della tua app per tenere traccia dei dati già inviati Connessione Salute. A questo scopo, applica la seguente logica:
- Fornisci un elenco delle modifiche e un token che può essere utilizzato per recuperare i record con aggiornamenti dall'emissione dell'ultimo token.
- Monitora l'ultima volta che i dati esportati sono stati modificati.
Questi passaggi sono essenziali per garantire che vengano inviati solo dati nuovi o aggiornati Connessione Salute.
Scrivi dati in Connessione Salute
Per inserire dati in Connessione Salute, svolgi i seguenti passaggi:
- Ottieni un elenco di voci nuove o aggiornate dal datastore della tua app.
- Per ogni voce, crea un oggetto
Record
appropriato per quel tipo di dati. Ad esempio, crea un oggettoWeightRecord
per i dati relativi al peso. Specifica un oggetto
Metadata
con ogniRecord
utilizzando la chiave univoca e i dettagli della versione dal datastore dell'app. Se i dati non sono sottoposti a controllo delle versioni, puoi utilizzare il valoreLong
del timestamp corrente come alternativa.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
Esegui l'upsert dei dati a Connessione Salute utilizzando
insertRecords
L'upsert dei dati significa che qualsiasi i dati di Connessione Salute vengono sovrascritti finché l'clientRecordId
sono presenti nel datastore di Connessione Salute eclientRecordVersion
è superiore al valore esistente. In caso contrario, i dati sottoposti a upserted vengono scritti come nuovi dati.healthConnectClient.insertRecords(arrayListOf(record))
Per conoscere le considerazioni pratiche per l'inserimento di dati, consulta le pratiche per la Scrittura di dati.
ID di Connessione Salute del negozio
Dopo aver eseguito l'upsert dei tuoi record a Connessione Salute, il datastore della tua app deve
archivia l'id
di Connessione Salute per ogni record. L'app può controllare
se ogni modifica in arrivo richiede la creazione di un nuovo record oppure
aggiornare un record esistente, dopo aver eseguito il pull dei dati.
La funzione insertRecords
restituisce un
InsertRecordsResponse
che contiene l'elenco di id
valori.
Utilizza la risposta per ottenere gli ID record e archiviarli.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Estrai i dati da Connessione Salute
La seconda parte del processo di sincronizzazione consiste nel recuperare eventuali modifiche dei dati Connessione Salute al datastore dell'app. Le modifiche ai dati possono includere aggiornamenti le eliminazioni.
Recuperare un token per le modifiche
Per ottenere un elenco delle modifiche da recuperare da Connessione Salute, la tua app deve mantenere traccia dei token Changes. Puoi utilizzarle quando richiedi modifiche a restituiscono sia un elenco di modifiche ai dati sia un nuovo token Modifiche da utilizzare successivamente nel tempo.
Per ottenere un token Modifiche, chiama getChangesToken
e
fornire i tipi di dati richiesti.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Verificare la presenza di modifiche ai dati
Ora che hai ottenuto un token Modifiche, utilizzalo per ottenere tutte le Modifiche. Consigliamo di creare un loop per vedere tutte le modifiche in cui controlla se ci sono modifiche ai dati disponibili. Ecco la procedura:
- Chiama
getChanges
utilizzando il token per ottenere un elenco di Modifiche. - Controllare ogni modifica per capire se il tipo di modifica
UpsertionChange
oDeletionChange
e eseguire le operazioni necessarie.- Per
UpsertionChange
, accetta solo le modifiche che non provengono da per assicurarti di non reimportare i dati.
- Per
- Assegna il token Modifiche successivo come nuovo token.
- Ripeti i passaggi da 1 a 3 finché non ci sono più Modifiche.
- Archivia il token successivo e prenotalo per un'importazione futura.
suspend fun processChanges(token: String): String {
var nextChangesToken = token
do {
val response = healthConnectClient.getChanges(nextChangesToken)
response.changes.forEach { change ->
when (change) {
is UpsertionChange ->
if (change.record.metadata.dataOrigin.packageName != context.packageName) {
processUpsertionChange(change)
}
is DeletionChange -> processDeletionChange(change)
}
}
nextChangesToken = response.nextChangesToken
} while (response.hasMore)
// Return and store the changes token for use next time.
return nextChangesToken
}
Per conoscere le considerazioni pratiche per l'estrazione dei dati, dai un'occhiata alle pratiche per la sincronizzazione dei dati.
Elabora le modifiche ai dati
Applica le modifiche al datastore dell'app. Per UpsertionChange
, usa id
e lastModifiedTime
da metadata
per potenziare il record.
Per DeletionChange
, utilizza il id
fornito per eliminare il record.
Elimina i dati da Connessione Salute
Quando un utente elimina i propri dati dalla tua app, assicurati che siano
anch'esso rimosso da Connessione Salute. Utilizza deleteRecords
per eseguire questa operazione. Questa operazione richiede un tipo di record e un elenco di id
e clientRecordId
, il che rende conveniente raggruppare più dati per l'eliminazione. Un
un'alternativa deleteRecords
che accetta timeRangeFilter
.
Best practice per la sincronizzazione dei dati
Il processo di sincronizzazione è influenzato dai seguenti fattori.
Scadenza del token
Poiché un token Modifiche inutilizzato scade entro 30 giorni, devi utilizzare un strategia che eviti di perdere informazioni in questo caso. La tua strategia potrebbe includono i seguenti approcci:
- Cerca nel datastore dell'app il record utilizzato più di recente che
ha un
id
di Connessione Salute. - Richiedi da Connessione Salute i record che iniziano con uno specifico e quindi inseriscili o aggiornali nel datastore dell'app.
- Richiedi un token delle modifiche per prenotarlo per la prossima volta in cui sarà necessario.
Strategie consigliate per la gestione delle modifiche
Nel caso in cui l'app riceva token Modifiche non validi o scaduti, consigliano le seguenti strategie di gestione a seconda della loro applicazione la tua logica:
- Leggere e deduplicare tutti i dati. Questa è la strategia ideale.
- Archivia il timestamp dell'ultima lettura di dati di Connessione Salute.
- Alla scadenza del token, rileggi tutti i dati dal timestamp più recente o per gli ultimi 30 giorni. Quindi, deduplicali in base ai dati letti in precedenza utilizzando o identificatori univoci.
- Idealmente, implementa gli ID client poiché sono necessari per gli aggiornamenti dei dati.
- Solo i dati letti dal timestamp dell'ultima lettura. Ciò porta ad alcuni dati
discrepanze relative alla scadenza del token delle modifiche, ma il periodo di tempo
è più breve e potrebbe richiedere da qualche ora a un paio di giorni.
- Archivia il timestamp dell'ultima lettura di dati di Connessione Salute.
- Alla scadenza del token, leggi tutti i dati a partire da questo timestamp.
- Elimina e leggi i dati degli ultimi 30 giorni. Questo rispecchia meglio
a ciò che accade con la prima integrazione.
- Elimina da Connessione Salute tutti i dati letti dall'app negli ultimi 30 giorni.
- Dopo averli eliminati, leggi di nuovo tutti questi dati.
- Leggi i dati degli ultimi 30 giorni senza deduplicazione. Questo è il livello minimo ideale
e determina la visualizzazione di dati duplicati agli utenti.
- Elimina tutti i dati letti dall'app da Connessione Salute per ultimi 30 giorni.
- Consenti voci duplicate.
Token delle modifiche al tipo di dati
Se la tua app utilizza più di un tipo di dati in modo indipendente, usa modifiche separate Token per ogni tipo di dati. Utilizza un elenco di più tipi di dati solo con il campo Modifica l'API Sync se questi tipi di dati vengono utilizzati insieme o non vengono utilizzati affatto.
Letture in primo piano
Le app possono leggere i dati di Connessione Salute solo quando sono in primo piano. Quando sincronizzi i dati da Connessione Salute, l'accesso a Connessione Salute potrebbe essere interrotto in qualsiasi momento. Ad esempio, l'app deve gestire le interruzioni durante una sincronizzazione durante la lettura di una grande quantità di dati da Connessione Salute, e continua all'apertura successiva dell'app.
Tempi di importazione
Poiché la tua app non può ricevere notifiche relative ai nuovi dati, controlla la presenza di nuovi dati in due punti:
- Ogni volta che la tua app diventa attiva in primo piano. In questo caso, utilizza degli eventi del ciclo di vita.
- Periodicamente, mentre l'app rimane in primo piano. Invia una notifica agli utenti quando sono disponibili nuovi dati, che consentono di aggiornare lo schermo per riflettere modifiche.