Die meisten Apps, die in Health Connect eingebunden werden können, haben einen eigenen Datenspeicher, der die als Informationsquelle dient. Mit Health Connect kannst du deine App synchronisiert.
Achten Sie darauf, dass Ihre App die folgenden Anforderungen erfüllt:
- Füttert neue oder aktualisierte Daten aus dem Datenspeicher Ihrer App in Health Connect.
- Es ruft Datenänderungen aus Health Connect ab, die in deinem App-Datenspeichers.
- Löscht Daten aus Health Connect, wenn sie im Datenspeicher Ihrer App gelöscht werden.
Achten Sie in jedem Fall darauf, dass durch den Synchronisierungsprozess sowohl Health Connect als auch mit dem Datenspeicher Ihrer App angeglichen werden.
Feeddaten für Health Connect
Der erste Teil des Synchronisierungsprozesses ist die Einspeisung von Daten aus dem Datenspeicher Ihrer App. mit dem Health Connect-Datenspeicher.
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 verfolgt wird, welche Daten bereits eingespeist wurden. Health Connect Wenden Sie dazu die folgende Logik an:
- Stellen Sie eine Liste der Änderungen und ein Token bereit, mit dem Datensätze abgerufen werden können die seit der letzten Ausstellung des Tokens aktualisiert wurden.
- Verfolgen Sie, wann die exportierten Daten zuletzt geändert wurden.
Diese Schritte sind unverzichtbar, um sicherzustellen, dass nur neue oder aktualisierte Daten Health Connect
Daten in Health Connect schreiben
So speisen Sie Daten in Health Connect ein:
- Rufen Sie eine Liste neuer oder aktualisierter Einträge aus dem Datenspeicher Ihrer Anwendung ab.
- Erstellen Sie für jeden Eintrag ein
Record
-Objekt entsprechend dem Datentyp. Erstellen Sie beispielsweise einWeightRecord
-Objekt für Daten, die sich auf das Gewicht beziehen. Geben Sie ein
Metadata
-Objekt mit jedemRecord
an, indem Sie den eindeutigen Schlüssel und Versionsdetails aus dem Datenspeicher Ihrer App. Wenn Ihre Daten nicht versioniert sind, können Sie alternativ den WertLong
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 )
Upsert von Daten in Health Connect mit
insertRecords
Das Upsert von Daten bedeutet, Daten in Health Connect werden überschrieben, solange dasclientRecordId
Werte im Health Connect-Datenspeicher vorhanden sind und dieclientRecordVersion
-Werte höher als der vorhandene Wert ist. Andernfalls werden die Upsert-Daten geschrieben, als neue Daten.healthConnectClient.insertRecords(arrayListOf(record))
Weitere Informationen zu den praktischen Überlegungen zum Einspeisen von Daten finden Sie in den Best Practices für das Schreiben von Daten
Health Connect-IDs speichern
Nach dem Upsert Ihrer Einträge in Health Connect muss der Datenspeicher Ihrer App
Health Connect-id
für jeden Eintrag speichern. So kann Ihre App prüfen,
Für jede eingehende Änderung muss ein neuer Eintrag erstellt werden.
einen vorhandenen Datensatz zu aktualisieren, nachdem Sie die Daten abgerufen haben.
Die Funktion insertRecords
gibt eine
InsertRecordsResponse
, die 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 des Synchronisierungsprozesses besteht darin, Daten Health Connect mit dem Datenspeicher Ihrer App Die Datenänderungen können Aktualisierungen und Löschungen.
Änderungstoken abrufen
Um eine Liste der Änderungen zu erhalten, die aus Health Connect abgerufen werden können, muss deine App Tracking von Changes-Tokens. Sie können sie verwenden, wenn Sie Änderungen an eine Liste mit Datenänderungen und ein neues Changes-Token zurückgeben, das als Nächstes verwendet wird .
Um ein Changes-Token zu erhalten, rufen Sie getChangesToken
auf und
die erforderlichen Datentypen liefern.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Auf Datenänderungen prüfen
Nachdem Sie nun ein Changes-Token erhalten haben, können Sie damit alle Changes (Änderungen) abrufen. Wir empfehlen, eine Schleife zu erstellen, um alle geprüften Änderungen zu durchlaufen ob Datenänderungen verfügbar sind. Gehen Sie dazu so vor:
- Rufen Sie
getChanges
mit dem Token auf, um eine Liste der Änderungen. - Überprüfen Sie für jede Änderung, ob die Änderungsart
UpsertionChange
oderDeletionChange
und um die erforderlichen Vorgänge durchzuführen.- Nehmen Sie für
UpsertionChange
nur Änderungen vor, die nicht aus dem App aufrufen, um sicherzustellen, dass Sie keine Daten noch einmal importieren.
- 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 übrig 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 beim Datenabruf finden Sie in den Tipps zur Datensynchronisierung
Datenänderungen verarbeiten
Zeigen Sie die Änderungen am Datenspeicher Ihrer App an. Für UpsertionChange
die id
verwenden
und den lastModifiedTime
aus seinem metadata
, um den Eintrag upsert zu erstellen.
Verwende für DeletionChange
die id
, die zum Löschen des Eintrags bereitgestellt wurden.
Daten aus Health Connect löschen
Wenn ein Nutzer seine eigenen Daten aus Ihrer App löscht, achten Sie darauf, dass die Daten
wurden ebenfalls aus Health Connect entfernt. deleteRecords
verwenden
um dies zu tun. Dabei werden ein Eintragstyp und eine Liste von id
und clientRecordId
verwendet.
-Werte, was vereinfacht, mehrere Daten zum Löschen in Stapeln zu stapeln. Eine
Alternative deleteRecords
mit timeRangeFilter
ist ebenfalls verfügbar.
Best Practices für die Datensynchronisierung
Die folgenden Faktoren beeinflussen den Synchronisierungsprozess.
Ablauf des Tokens
Da ein nicht verwendetes Changes-Token innerhalb von 30 Tagen abläuft, müssen Sie eine Synchronisierung verwenden um in solchen Fällen Informationen zu verlieren. Ihre Strategie könnte umfassen folgende Ansätze:
- Durchsuchen Sie Ihren Anwendungsdatenspeicher nach dem zuletzt verwendeten Datensatz, der auch
hat ein
id
von Health Connect. - Datensätze von Health Connect anfordern, die mit einem bestimmten Zeitstempel hinzufügen und diese dann in den Datenspeicher Ihrer App einfügen oder aktualisieren.
- Fordern Sie ein Änderungstoken an, um es für das nächste Mal bei Bedarf zu reservieren.
Empfohlene Strategien für das Änderungsmanagement
Falls Ihre App ungültige oder abgelaufene Changes-Tokens erhält, empfehlen die folgenden Verwaltungsstrategien je nach Anwendung in Ihre Logik:
- Alle Daten lesen und deduplizieren. Das ist die ideale Strategie.
- Speichert den Zeitstempel des letzten Datenabrufs aus Health Connect.
- Lesen Sie bei Ablauf des Tokens noch einmal alle Daten vom letzten Zeitstempel oder den letzten 30 Tagen. Deduplizieren Sie anschließend mit den zuvor gelesenen Daten Kennzeichnungen.
- Idealerweise sollten Sie Client-IDs implementieren, da diese für Datenaktualisierungen erforderlich sind.
- Nur Daten seit dem Zeitstempel des letzten Lesevorgangs lesen: Daraus ergeben sich einige Daten
Abweichungen um den Ablauf des Änderungstokens, aber den Zeitraum
ist kürzer, was einige Stunden bis Tage dauern kann.
- Speichert den Zeitstempel des letzten Datenabrufs aus Health Connect.
- Bei Ablauf des Tokens alle Daten ab diesem Zeitstempel lesen.
- Daten der letzten 30 Tage löschen und dann lesen. Dies bezieht sich eher auf
was bei der ersten Integration passiert.
- Alle Daten löschen, die die App in den letzten 30 Tagen aus Health Connect gelesen hat Tage.
- Nach dem Löschen kannst du all diese Daten noch einmal lesen.
- Daten der letzten 30 Tage ohne Deduplizierung lesen. Das ist am wenigsten ideal,
und führt dazu, dass Nutzenden doppelte Daten angezeigt werden.
- Alle von der App aus Health Connect gelesenen Daten für den folgenden Zeitraum löschen: in den letzten 30 Tagen.
- Doppelte Einträge zulassen.
Tokens für Datentypänderungen
Wenn Ihre Anwendung mehr als einen Datentyp unabhängig verarbeitet, verwenden Sie separate Änderungen Tokens für jeden Datentyp. Nur eine Liste mit mehreren Datentypen mit dem Parameter Ändert die Sync API, wenn diese Datentypen zusammen oder überhaupt nicht verbraucht werden.
Lesevorgänge im Vordergrund
Apps können Daten von Health Connect nur dann lesen, wenn sie im Vordergrund ausgeführt werden. Wenn Daten aus Health Connect synchronisiert werden, ist der Zugriff auf Health Connect möglicherweise an irgendeinem Punkt unterbrochen werden. Ihre App muss beispielsweise mit Unterbrechungen umgehen können. wenn eine große Datenmenge aus Health Connect gelesen wurde, und beim nächsten Öffnen der App fortfahren.
Importzeiten
Da Ihre App nicht über neue Daten benachrichtigt werden kann, sollten Sie an zwei Punkten prüfen, ob neue Daten vorliegen:
- Jedes Mal, wenn deine App im Vordergrund aktiv wird. Verwenden Sie in diesem Fall Lebenszyklus-Ereignisse.
- In regelmäßigen Abständen, während die App im Vordergrund bleibt. Nutzer benachrichtigen, wenn sind neue Daten verfügbar, sodass sie ihren Bildschirm aktualisieren können, Änderungen.