Die meisten Apps, die in Health Connect eingebunden werden, haben einen eigenen Datenspeicher, der als „Source of Truth“ dient. Health Connect bietet Möglichkeiten, deine App synchron zu halten.
Sorgen Sie dafür, dass Ihre App die folgenden Anforderungen erfüllt:
- Übergibt neue oder aktualisierte Daten aus dem Datenspeicher Ihrer App in Health Connect.
- Datenänderungen werden aus Health Connect abgerufen, die im Datenspeicher Ihrer Anwendung widergespiegelt werden.
- Mit dieser Option werden Daten aus Health Connect gelöscht, wenn sie im Datenspeicher Ihrer App gelöscht werden.
Achten Sie in jedem Fall darauf, dass der Synchronisierungsprozess sowohl für Health Connect als auch für den Datenspeicher Ihrer App aufeinander abgestimmt ist.
Daten in Health Connect speisen
Der erste Teil der Synchronisierung besteht darin, Daten aus dem Datenspeicher Ihrer App in den Health Connect-Datenspeicher einzuspeisen.
Daten vorbereiten
Normalerweise enthalten Datensätze im Datenspeicher Ihrer Anwendung die folgenden Details:
- Einen eindeutigen Schlüssel, z. B.
UUID
. - Eine Version oder ein Zeitstempel.
Entwerfen Sie den Datenspeicher Ihrer Anwendung so, dass Sie nachverfolgen können, welche Daten bereits in Health Connect eingespeist wurden. Wenden Sie dazu die folgende Logik an:
- Geben Sie eine Liste der Änderungen und ein Token an, mit dem Einträge abgerufen werden können, die seit der letzten Ausstellung aktualisiert wurden.
- Verfolgen Sie, wann die exportierten Daten zuletzt geändert wurden.
Diese Schritte sind wichtig, um sicherzustellen, dass nur neue oder aktualisierte Daten in Health Connect eingespeist werden.
Daten in Health Connect schreiben
Führe die folgenden Schritte aus, um Daten in Health Connect einzuspeisen:
- Eine Liste neuer oder aktualisierter Einträge aus dem Datenspeicher Ihrer Anwendung abrufen.
- Erstellen Sie für jeden Eintrag ein geeignetes
Record
-Objekt für den jeweiligen Datentyp. Erstellen Sie beispielsweise einWeightRecord
-Objekt für Gewichtsdaten. Geben Sie für jede
Record
einMetadata
-Objekt an. Verwenden Sie dazu den eindeutigen Schlüssel und die Versionsdetails aus dem Datenspeicher Ihrer Anwendung. Wenn Ihre Daten nicht versioniert sind, können Sie alternativ denLong
-Wert des aktuellen Zeitstempels verwenden.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
Führen Sie ein Upsert von Daten mit
insertRecords
in Health Connect durch. Beim Upsert von Daten werden alle in Health Connect vorhandenen Daten überschrieben, sofern dieclientRecordId
-Werte im Health Connect-Datenspeicher vorhanden sind und derclientRecordVersion
-Wert höher als der vorhandene Wert ist. Andernfalls werden die per Upsert aktualisierten Daten als neue Daten geschrieben.healthConnectClient.insertRecords(arrayListOf(record))
Weitere Informationen zu den praktischen Überlegungen beim Einspeisen von Daten finden Sie in den Best Practices zum Schreiben von Daten.
Store Health Connect-IDs
Nachdem Sie Ihre Einträge in Health Connect aktualisiert haben, muss der Datenspeicher Ihrer App die Health Connect-id
für jeden Datensatz speichern. Dadurch kann Ihre Anwendung prüfen, ob für jede eingehende Änderung ein neuer Eintrag erstellt oder ein vorhandener Eintrag aktualisiert werden muss, nachdem Sie die Daten abgerufen haben.
Die Funktion insertRecords
gibt einen InsertRecordsResponse
zurück, der die Liste der id
-Werte enthält.
Verwenden Sie die Antwort, um die Datensatz-IDs abzurufen und zu speichern.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Daten aus Health Connect abrufen
Der zweite Teil der Synchronisierung besteht darin, alle Datenänderungen von Health Connect in den Datenspeicher Ihrer Anwendung abzurufen. Die Datenänderungen können Aktualisierungen und Löschungen umfassen.
Änderungstoken abrufen
Damit Sie eine Liste der Änderungen abrufen können, die aus Health Connect abgerufen werden können, muss Ihre Anwendung Changes-Tokens verfolgen. Sie können sie verwenden, wenn Sie Changes anfordern, um sowohl eine Liste mit Datenänderungen als auch ein neues Changes-Token für das nächste Mal zurückzugeben.
Um ein Changes-Token zu erhalten, rufen Sie getChangesToken
auf und geben Sie die erforderlichen Datentypen an.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Auf Datenänderungen prüfen
Nachdem Sie jetzt ein Changes-Token erhalten haben, können Sie damit alle Changes abrufen. Wir empfehlen, eine Schleife zu erstellen, um alle Änderungen zu durchlaufen und zu prüfen, ob Datenänderungen verfügbar sind. Gehen Sie dazu so vor:
- Rufen Sie
getChanges
mit dem Token auf, um eine Liste der Änderungen zu erhalten. - Prüfen Sie bei jeder Änderung, ob es sich um eine
UpsertionChange
- oderDeletionChange
-Änderung handelt, und führen Sie die erforderlichen Vorgänge aus.- Nehmen Sie für
UpsertionChange
nur Änderungen vor, die nicht von der aufrufenden App stammen, damit keine Daten noch einmal importiert werden.
- Nehmen Sie für
- Weisen Sie das nächste Changes-Token als neues Token zu.
- Wiederholen Sie die Schritte 1 bis 3, bis keine Änderungen mehr vorhanden sind.
- Speichern Sie das nächste Token und reservieren Sie es für einen zukünftigen Import.
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
}
Weitere Informationen zu den praktischen Überlegungen zum Abrufen von Daten finden Sie in den Best Practices zum Synchronisieren von Daten.
Änderungen an Prozessdaten
Nehmen Sie die Änderungen am Datenspeicher Ihrer Anwendung auf. Verwenden Sie für UpsertionChange
den id
und den lastModifiedTime
aus dem metadata
, um den Eintrag upsert zu können.
Verwenden Sie für DeletionChange
den id
, um den Eintrag zu löschen.
Daten aus Health Connect löschen
Wenn ein Nutzer seine eigenen Daten aus Ihrer App löscht, achten Sie darauf, dass die Daten auch aus Health Connect entfernt werden. Verwenden Sie dazu deleteRecords
. Es wird eine Liste mit id
- und clientRecordId
-Werten erstellt, die es praktisch macht, mehrere Daten zum Löschen im Batch zu speichern.