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:
- Uzyskaj listę nowych lub zaktualizowanych wpisów z magazynu danych Twojej aplikacji.
- Dla każdego wpisu utwórz obiekt
Record
odpowiedni do danego typu danych. Możesz na przykład utworzyć obiektWeightRecord
dla danych związanych z wagą. Określ obiekt
Metadata
z każdym elementemRecord
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ściLong
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 )
Prześlij dane do Health Connect za pomocą
insertRecords
. Upsertowanie danych oznacza, że wszystkie istniejące dane w Health Connect są zastępowane, dopókiclientRecordId
istnieją w magazynie danych Health Connect, aclientRecordVersion
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:
- Wywołaj metodę
getChanges
przy użyciu tokena, aby uzyskać listę: Zmiany. - Sprawdzaj każdą zmianę, pod kątem której
UpsertionChange
lubDeletionChange
, 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.
- W przypadku aplikacji
- Jako nowy token przypisz kolejny token Changes (zmiany).
- Powtarzaj kroki 1–3, aż nie zostaną już żadne Zmian.
- 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.