Synchronizuj dane

Większość aplikacji integrujących się z Health Connect ma własny magazyn danych, stanowi źródło prawdy. Health Connect zapewnia różne sposoby na zachowanie aplikacji zsynchronizowane.

Upewnij się, że aplikacja:

  • Przesyła nowe lub zaktualizowane dane z magazynu danych Twojej aplikacji do aplikacji Health Connect.
  • Pobiera zmiany danych z Health Connect, które są odzwierciedlane w w magazynie danych aplikacji.
  • Usuwa dane z Health Connect po ich usunięciu z magazynu danych aplikacji.

W każdym przypadku upewnij się, że proces synchronizacji zachowuje zarówno Health Connect, magazyn danych aplikacji.

Prześlij dane do Health Connect

Pierwsza część procesu synchronizacji to przesłanie danych z magazynu danych aplikacji do magazynu danych Health Connect.

Przygotowywanie danych

Zwykle rekordy w magazynie danych aplikacji zawierają te szczegółowe informacje:

  • Klucz unikalny, np. UUID.
  • Wersja lub sygnatura czasowa.

Zaprojektuj magazyn danych swojej aplikacji tak, aby śledzić, do jakich danych zostały już przesłane Health Connect. Aby to osiągnąć, zastosuj tę logikę:

  • Podaj listę zmian i token, którego można użyć do pobrania rekordów z aktualizacjami od czasu wystawienia ostatniego tokena.
  • Śledzenie ostatniej modyfikacji wyeksportowanych danych.

Te czynności są niezbędne, aby do usługi trafiały tylko nowe lub zaktualizowane dane Health Connect.

Zapisywanie danych w Health Connect

Aby przesłać dane do Health Connect, wykonaj te czynności:

  1. Uzyskaj listę nowych lub zaktualizowanych wpisów z magazynu danych Twojej aplikacji.
  2. Dla każdego wpisu utwórz obiekt Record odpowiedni do danego typu danych. Możesz na przykład utworzyć obiekt WeightRecord dla danych związanych z wagą.
  3. Określ obiekt Metadata z każdym elementem Record za pomocą unikalnego klucza i szczegóły wersji z magazynu danych aplikacji. Jeśli dane nie mają różnych wersji, możesz zamiast tego użyć wartości Long bieżącej sygnatury czasowej.

    val record = WeightRecord(
        metadata = Metadata(
            clientRecordId = "<Your record's Client ID>",
            clientRecordVersion = <Your record's version>
        ),
        weight = weight,
        time = time,
        zoneOffset = zoneOffset
    )
    
  4. Prześlij dane do Health Connect za pomocą insertRecords. Upsertowanie danych oznacza, że wszystkie istniejące dane w Health Connect są zastępowane, dopóki clientRecordId istnieją w magazynie danych Health Connect, a clientRecordVersion jest wyższa niż obecna wartość. W przeciwnym razie dane wstawione przez upsert są zapisywane jako nowe dane.

    healthConnectClient.insertRecords(arrayListOf(record))
    

Aby dowiedzieć się więcej o praktycznych kwestiach związanych z przesyłaniem danych, zapoznaj się z najlepszymi metod zapisywania danych.

Przechowuj identyfikatory Health Connect

Po przesłaniu rekordów do Health Connect magazyn danych aplikacji musi: dla każdego rekordu id Health Connect. Dzięki temu aplikacja będzie mogła sprawdzać, jeśli każda zmiana przychodząca wymaga utworzenia nowego rekordu. zaktualizowanie istniejącego rekordu po pobraniu danych.

Funkcja insertRecords zwraca błąd InsertRecordsResponse zawierający listę wartości id. Użyj odpowiedzi, aby uzyskać identyfikatory rekordów i je zapisać.

val response = healthConnectClient.insertRecords(arrayListOf(record))

for (recordId in response.recordIdsList) {
    // Store recordId to your app's datastore
}

Pobieraj dane z Health Connect

Druga część procesu synchronizacji polega na pobieraniu wszelkich zmian danych Health Connect z magazynem danych aplikacji. Zmiany danych mogą obejmować aktualizacje usunięcia.

Pobieranie tokena zmian

Aby pobrać listę zmian do pobrania z Health Connect, aplikacja musi: śledzić tokeny zmian. Możesz ich użyć, prosząc o zmiany w następujących zwraca zarówno listę zmian danych, jak i nowy token Changes do użycia obecnie się znajdujesz.

Aby uzyskać token Changes, wywołaj getChangesToken i i dostarczać wymagane typy danych.

val changesToken = healthConnectClient.getChangesToken(
    ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)

Sprawdź, czy dane nie uległy zmianie

Gdy otrzymasz token Zmiany, użyj go, aby pobrać wszystkie Zmiany. Zalecamy utworzenie pętli umożliwiającej przejście przez wszystkie zmiany, w których są sprawdzane. jeśli dane zostaną zmienione. W tym celu:

  1. Wywołaj metodę getChanges przy użyciu tokena, aby uzyskać listę: Zmiany.
  2. Sprawdzaj każdą zmianę, pod kątem której UpsertionChange lub DeletionChange, i wykonam niezbędne działania.
    • W przypadku aplikacji UpsertionChange wprowadzaj tylko te zmiany, które nie pochodzą z w aplikacji do połączeń, aby upewnić się, że nie importujesz ponownie danych.
  3. Jako nowy token przypisz kolejny token Changes (zmiany).
  4. Powtarzaj kroki 1–3, aż nie zostaną już żadne Zmian.
  5. Przechowuj następny token i zarezerwuj go na potrzeby przyszłego importu.
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
}

Aby dowiedzieć się więcej o praktycznych kwestiach związanych z pobieraniem danych, zapoznaj się z najlepszymi metod synchronizacji danych.

Przetwarzanie zmian danych

Odzwierciedla zmiany w magazynie danych aplikacji. W przypadku UpsertionChange użyj id oraz lastModifiedTime od metadata do uruchomienia rekordu. W przypadku DeletionChange użyj podanej wartości id, aby usunąć rekord.

Usuwanie danych z Health Connect

Gdy użytkownik usunie swoje dane z Twojej aplikacji, upewnij się, że są one usunięto też z Health Connect. Użyj formatu deleteRecords w tym celu. Wymaga to typu rekordu i listy tych właściwości: id i clientRecordId dzięki czemu można grupować wiele danych w celu ich usunięcia. An alternatywna deleteRecords, która przyjmuje timeRangeFilter jest również dostępna.

Sprawdzone metody synchronizacji danych

Na proces synchronizacji wpływają następujące czynniki.

Wygaśnięcie tokena

Nieużywany token Changes wygasa po 30 dniach, więc musisz użyć synchronizacji. która pozwala uniknąć utraty informacji w takim przypadku. Twoja strategia może możesz zastosować następujące metody:

  • Wyszukaj w magazynie danych aplikacji ostatnio wykorzystany rekord, który również ma aplikację id z Health Connect.
  • Poproś o zapisy z Health Connect, które zaczynają się od określonej sygnatura czasowa, a następnie wstaw lub zaktualizuj je w magazynie danych aplikacji.
  • Poproś o token zmian, aby zarezerwować go na przyszłość.

Zalecane strategie zarządzania zmianami

Jeśli w przypadku Twojej aplikacji tokeny zmian wygasły lub otrzymują nieprawidłowe tokeny, zalecane są następujące strategie zarządzania w zależności od jego zastosowania Twoja logika:

  • Odczyt i usuwanie duplikatów wszystkich danych. To najlepsza strategia.
    • Zapisuje sygnaturę czasową ostatniego odczytu danych z Health Connect.
    • Po wygaśnięciu tokena ponownie odczytaj wszystkie dane z ostatniej sygnatury czasowej lub dla ostatnich 30 dni. Następnie usuń duplikat z odczytywanymi wcześniej danymi za pomocą i identyfikatorów.
    • Najlepiej wdrożyć identyfikatory klienta, ponieważ są one wymagane do aktualizacji danych.
  • Odczytuj tylko dane od ostatniej sygnatury czasowej odczytu. W rezultacie pewne dane w okolicach wygaśnięcia tokena zmian, ale w okresie może potrwać od kilku godzin do kilku dni.
    • Zapisuje sygnaturę czasową ostatniego odczytu danych z Health Connect.
    • Po wygaśnięciu tokena odczytuj wszystkie dane od tej sygnatury czasowej.
  • Usuń, a następnie odczytaj dane z ostatnich 30 dni. W ten sposób co dzieje się przy pierwszej integracji.
    • Usuń wszystkie dane odczytywane przez aplikację z Health Connect z ostatnich 30 dni dni.
    • Po usunięciu przeczytaj ponownie wszystkie te dane.
  • Odczytywanie danych z ostatnich 30 dni bez usuwania duplikatów To najmniej idealny i powoduje wyświetlanie powielonych danych użytkownikom.
    • Usuń wszystkie dane odczytywane przez aplikację z Health Connect na ostatnich 30 dni.
    • Zezwalaj na zduplikowane wpisy.

Tokeny zmiany typu danych

Jeśli aplikacja korzysta z więcej niż 1 typu danych niezależnie, użyj osobnych opcji Tokeny dla każdego typu danych. Korzystając z listy zawierającej wiele typów danych, Zmienia interfejs Sync API, jeśli te typy danych są wykorzystywane razem lub nie są używane wcale.

Czytania na pierwszym planie

Aplikacje mogą odczytywać dane z Health Connect tylko wtedy, gdy działają na pierwszym planie. Podczas synchronizowania danych z Health Connect dostęp do tej usługi może być mogą zostać przerwane w dowolnym momencie. Na przykład aplikacja musi obsługiwać powiadomienia. w trakcie synchronizacji przy odczytywaniu dużej ilości danych z Health Connect, i kontynuuj po następnym uruchomieniu aplikacji.

Harmonogramy importowania

Aplikacja nie może otrzymywać powiadomień o nowych danych, dlatego sprawdź ich dostępność w 2 punktach:

  • Za każdym razem, gdy aplikacja staje się aktywna na pierwszym planie. W takim przypadku użyj funkcji zdarzenia cyklu życia.
  • Okresowo, gdy aplikacja pozostaje na pierwszym planie. Powiadom użytkowników, gdy nowych danych, które pozwalają aktualizować ekran, zmian.