La mayoría de las apps que se integran con Health Connect tienen su propio almacén de datos que sirve como fuente de información. Health Connect proporciona formas de mantener tu app sincronizada.
Asegúrate de que tu app haga lo siguiente:
- Ingresar datos nuevos o actualizados del almacén de datos de tu app a Health Connect.
- Extraer los cambios de datos de Health Connect, que se reflejan en el almacén de datos de tu app.
- Borrar datos de Health Connect cuando se borran del almacén de datos de tu app.
En cada caso, asegúrate de que el proceso de sincronización mantenga alineados Health Connect y el almacén de datos de tu app.
Cómo ingresar datos en Health Connect
La primera parte del proceso de sincronización consiste en enviar datos desde el almacén de datos de tu app al almacén de datos de Health Connect.
Cómo preparar los datos
Por lo general, los registros del almacén de datos de tu app tienen los siguientes detalles:
- Una clave única, como un
UUID
- Una versión o una marca de tiempo
Diseña el almacén de datos de tu app para realizar un seguimiento de los datos que ya se ingresaron a Health Connect. Para lograrlo, aplica la siguiente lógica:
- Proporciona una lista de cambios y un token que se pueda usar para recuperar registros que tengan actualizaciones desde que se emitió el último token.
- Realiza un seguimiento de la última vez que se modificaron los datos exportados.
Estos pasos son esenciales para garantizar que solo se envíen datos nuevos o actualizados a Health Connect.
Cómo escribir datos en Health Connect
Para ingresar datos en Health Connect, sigue estos pasos:
- Obtén la lista de las entradas nuevas o actualizadas del almacén de datos de tu app.
- Para cada entrada, crea un objeto
Record
apropiado para ese tipo de datos. Por ejemplo, crea un objetoWeightRecord
para datos relacionados con el peso. Especifica un objeto
Metadata
con cadaRecord
mediante los detalles únicos de la versión y la clave del almacén de datos de tu app. Si tus datos no tienen control de versiones, puedes usar el valorLong
de la marca de tiempo actual como alternativa.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
Inserta y actualiza datos a Health Connect con
insertRecords
. La inserción y actualización de datos implica que los datos existentes de Health Connect se reemplazan siempre que los valores declientRecordId
existan en el almacén de datos de Health Connect, y el valor declientRecordVersion
sea mayor que el valor existente. De lo contrario, los datos insertados y actualizados se escriben como datos nuevos.healthConnectClient.insertRecords(arrayListOf(record))
Si quieres conocer las consideraciones prácticas para agregar datos, consulta las prácticas recomendadas sobre Cómo escribir datos.
Cómo almacenar IDs de Health Connect
Después de insertar y actualizar tus registros en Health Connect, el almacén de datos de tu app debe almacenar el id
de Health Connect de cada registro. Esto permite que la app verifique si cada cambio entrante requiere crear un registro nuevo o actualizar un registro existente después de extraer los datos.
La función insertRecords
muestra un InsertRecordsResponse
que contiene la lista de valores id
.
Usa la respuesta para obtener los IDs de registro y almacenarlos.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Cómo extraer datos de Health Connect
La segunda parte del proceso de sincronización consiste en extraer cualquier cambio de datos de Health Connect al almacén de datos de la app. Los cambios de datos pueden incluir actualizaciones y eliminaciones.
Cómo obtener un token de cambios
A fin de obtener una lista de cambios para extraer de Health Connect, tu app debe hacer un seguimiento de los tokens de Cambios. Puedes usarlos cuando solicites Cambios para mostrar una lista de cambios de datos y un token de Cambios nuevo que se usará la próxima vez.
Para obtener un token de Cambios, llama a getChangesToken
y proporciona los tipos de datos obligatorios.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Cómo verificar si hay cambios en los datos
Ahora que obtuviste un token de Cambios, úsalo para obtener todos los Cambios. Te recomendamos que crees un bucle para revisar todos los Cambios donde se verifique si hay cambios de datos disponibles. Sigue estos pasos:
- Llama a
getChanges
con el token para obtener una lista de Cambios. - Verifica cada cambio para saber si su tipo de cambio es
UpsertionChange
oDeletionChange
, y realiza las operaciones necesarias.- Para
UpsertionChange
, solo realiza cambios que no provengan de la app que realiza la llamada a fin de asegurarte de no volver a importar datos.
- Para
- Asigna el siguiente token de Cambios como tu token nuevo.
- Repite los pasos 1 a 3 hasta que no queden Cambios.
- Almacena el siguiente token y guárdalo para una importación 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
}
Si deseas conocer las consideraciones prácticas sobre la extracción de datos, consulta las prácticas recomendadas de sincronización de datos.
Cómo procesar cambios en los datos
Refleja los cambios que se realizaron en el almacén de datos de tu app. Para UpsertionChange
, usa el id
y la lastModifiedTime
de sus metadata
a fin de insertar y actualizar el registro.
En DeletionChange
, usa el id
proporcionado para borrar el registro.
Cómo borrar datos de Health Connect
Cuando un usuario borre sus propios datos de tu app, asegúrate de que los datos también se quiten de Health Connect. Usa deleteRecords
para hacerlo. Esto toma un tipo de registro y una lista de valores id
y clientRecordId
, lo que hace que sea conveniente agrupar varios datos para su eliminación. También está disponible un deleteRecords
alternativo que toma un timeRangeFilter
.