Daten synchronisieren

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:

  1. Rufen Sie eine Liste neuer oder aktualisierter Einträge aus dem Datenspeicher Ihrer Anwendung ab.
  2. Erstellen Sie für jeden Eintrag ein Record-Objekt entsprechend dem Datentyp. Erstellen Sie beispielsweise ein WeightRecord-Objekt für Daten, die sich auf das Gewicht beziehen.
  3. Geben Sie ein Metadata-Objekt mit jedem Record 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 Wert Long 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
    )
    
  4. Upsert von Daten in Health Connect mit insertRecords Das Upsert von Daten bedeutet, Daten in Health Connect werden überschrieben, solange das clientRecordId Werte im Health Connect-Datenspeicher vorhanden sind und die clientRecordVersion-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:

  1. Rufen Sie getChanges mit dem Token auf, um eine Liste der Änderungen.
  2. Überprüfen Sie für jede Änderung, ob die Änderungsart UpsertionChange oder DeletionChange 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.
  3. Weisen Sie das nächste Changes-Token als neues Token zu.
  4. Wiederholen Sie die Schritte 1 bis 3, bis keine Änderungen mehr übrig sind.
  5. 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.