La maggior parte delle app che si integrano con Connessione Salute dispone di un proprio datastore che funge da fonte attendibile. Connessione Salute offre modi per mantenere sincronizzata la tua app.
Assicurati che la tua app:
- Invia a Connessione Salute i dati nuovi o aggiornati dal datastore della tua app.
- Estrae le modifiche ai dati da Connessione Salute, che si riflettono nel datastore della tua app.
- Elimina i dati di Connessione Salute quando vengono eliminati nel datastore della tua app.
In ogni caso, assicurati che il processo di sincronizzazione mantenga Collegamenti Salute e datastore della tua app.
Invia dati a Connessione Salute
La prima parte del processo di sincronizzazione consiste nel fornire i dati del datastore della tua app al datastore di Connessione Salute.
Preparare i dati
In genere, i record nel datastore della tua 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 a 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 contenenti aggiornamenti dall'emissione dell'ultimo token.
- Monitora l'ultima volta che i dati esportati sono stati modificati.
Questi passaggi sono essenziali per garantire che solo i dati nuovi o aggiornati vengano inviati a Connessione Salute.
Scrivere dati in Connessione Salute
Per fornire dati a 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 alla ponderazione. Specifica un oggetto
Metadata
con ogniRecord
utilizzando i dettagli univoci della chiave e della versione dal datastore della tua app. Se i dati non hanno il controllo delle versioni, puoi utilizzare, in alternativa, il valoreLong
del timestamp corrente.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 in Connessione Salute utilizzando
insertRecords
. Con l'upsert dei dati, i dati esistenti in Connessione Salute vengono sovrascritti a condizione che i valoriclientRecordId
siano presenti nel datastore di Connessione Salute e che il valoreclientRecordVersion
sia maggiore del valore esistente. In caso contrario, i dati sottoposti a upsert vengono scritti come nuovi dati.healthConnectClient.insertRecords(arrayListOf(record))
Per conoscere le considerazioni pratiche per l'inserimento di dati nel feed, consulta le best practice per la scrittura di dati.
ID Store Connessione Salute
Dopo aver eseguito l'upsert dei record in Connessione Salute, il datastore della tua app deve archiviare il valore id
di Connessione Salute per ogni record. Ciò consente all'app di verificare se ogni modifica in arrivo richiede la creazione di un nuovo record o l'aggiornamento di un record esistente, dopo il pull dei dati.
La funzione insertRecords
restituisce un InsertRecordsResponse
contenente l'elenco di valori di id
.
Utilizza la risposta per recuperare 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 nell'eseguire il pull di eventuali modifiche ai dati da Connessione Salute al datastore della tua app. Le modifiche ai dati possono includere aggiornamenti ed eliminazioni.
Ottenere un token Modifiche
Per ottenere un elenco delle modifiche da estrarre da Connessione Salute, la tua app deve tenere traccia dei token Changes. Puoi utilizzarli quando richiedi Changes per restituire sia un elenco di modifiche ai dati sia un nuovo token Changes da utilizzare la volta successiva.
Per ottenere un token Changes, chiama getChangesToken
e fornisci 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 Changes, utilizzalo per ricevere tutte le Changes. Consigliamo di creare un loop per completare tutte le modifiche in cui viene verificato se sono disponibili modifiche ai dati. Ecco la procedura:
- Chiama
getChanges
utilizzando il token per ottenere un elenco di Modifiche. - Controlla ogni modifica se il tipo di modifica è
UpsertionChange
oDeletionChange
ed esegui le operazioni necessarie.- Per
UpsertionChange
, apporta solo le modifiche non provenienti dall'app per le chiamate per assicurarti di non reimportare i dati.
- Per
- Assegna il token Changes successivo come nuovo token.
- Ripeti i passaggi 1-3 finché non sono rimaste 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, consulta le best practice per la sincronizzazione dei dati.
Elabora le modifiche ai dati
Mostra le modifiche al datastore della tua app. Per UpsertionChange
, usa id
e lastModifiedTime
da metadata
a upsert del record.
Per DeletionChange
, utilizza il id
fornito per eliminare il record.
Eliminare i dati da Connessione Salute
Quando un utente elimina i propri dati dalla tua app, assicurati che i dati vengano
rimossi anche da Connessione Salute. Usa deleteRecords
per farlo. L'operazione richiede un tipo di record e un elenco di valori id
e clientRecordId
, in modo da semplificare il raggruppamento di più dati per l'eliminazione. È disponibile anche un'deleteRecords
alternativa che richiede un timeRangeFilter
.