Większość aplikacji, które integrują się z Health Connect, ma własny magazyn danych, który służy jako źródło wiarygodnych informacji. Health Connect oferuje sposoby na synchronizację aplikacji.
Upewnij się, że aplikacja:
- Przesyła nowe lub zaktualizowane dane z bazy danych aplikacji do Health Connect.
- Pobiera zmiany danych z Health Connect, które są odzwierciedlane w puli danych aplikacji.
- Usuwa dane z Health Connect, gdy zostaną usunięte z puli danych aplikacji.
W każdym przypadku upewnij się, że proces synchronizacji zapewnia spójność danych w Health Connect i bazie danych aplikacji.
Przesyłanie danych do Health Connect
Pierwszą częścią procesu synchronizacji jest przesyłanie danych z puli danych aplikacji do puli danych Health Connect.
Przygotowanie danych
Zazwyczaj rekordy w danych aplikacji zawierają te informacje:
- unikalny klucz, np.
UUID
; - Wersja lub sygnatura czasowa.
Zaprojektuj bazę danych aplikacji, aby śledzić, które dane zostały już przesłane do Health Connect. Aby to osiągnąć, zastosuj tę regułę:
- Podaj listę zmian i token, którego można użyć do pobrania rekordów, które zostały zaktualizowane od czasu wydania ostatniego tokena.
- śledzić ostatnią datę modyfikacji wyeksportowanych danych;
Te kroki są niezbędne, aby do Health Connect trafiały tylko nowe lub zaktualizowane dane.
Zapisywanie danych w Health Connect
Aby przesyłać dane do Health Connect, wykonaj te czynności:
- Pobierz z danych aplikacji listę nowych lub zaktualizowanych wpisów.
- W przypadku każdego wpisu utwórz obiekt
Record
odpowiedni dla tego typu danych. Na przykład utwórz obiektWeightRecord
dla danych związanych z wagą. Określ obiekt
Metadata
dla każdegoRecord
, używając unikalnego klucza i szczegółów wersji z magazynu danych aplikacji. Jeśli dane nie są wersjonowane, możesz 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 )
Wstawiaj dane do Health Connect za pomocą
insertRecords
. Wgrywanie danych oznacza, że wszystkie istniejące dane w Health Connect zostaną zastąpione, o ile wartościclientRecordId
istnieją w danych Health Connect, a wartośćclientRecordVersion
jest wyższa od dotychczasowej wartości. W przeciwnym razie zaktualizowane dane są zapisywane jako nowe dane.healthConnectClient.insertRecords(arrayListOf(record))
Aby dowiedzieć się więcej o praktycznych aspektach przesyłania danych, zapoznaj się ze sprawdzonymi metodami dotyczącymi zapisu danych.
Przechowywanie identyfikatorów Health Connect
Po zaktualizowaniu rekordów w Health Connect baza danych Twojej aplikacji musi przechowywać dane Health Connect id
dla każdego rekordu. Dzięki temu aplikacja może sprawdzić, czy po pobraniu danych każda zmiana przychodząca wymaga utworzenia nowego rekordu lub zaktualizowania dotychczasowego.
Funkcja insertRecords
zwraca element InsertRecordsResponse
zawierający listę wartości id
.
Użyj odpowiedzi, aby pobrać identyfikatory nagrań i je zapisać.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Pobieranie danych z Health Connect
Druga część procesu synchronizacji polega na pobraniu wszelkich zmian danych z Health Connect do bazy danych aplikacji. Zmiany danych mogą obejmować aktualizacje i usunięcia.
Pobieranie tokena zmian
Aby pobrać listę zmian z Health Connect, aplikacja musi śledzić tokeny Zmiany. Możesz ich użyć, aby zapytanie Changes zwróciło zarówno listę zmian danych, jak i nowy token Changes, który będzie można użyć następnym razem.
Aby uzyskać token Changes, wywołaj funkcję getChangesToken
i podaj wymagane typy danych.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Sprawdzanie zmian danych
Po uzyskaniu tokena Changes użyj go do pobrania wszystkich zmian. Zalecamy utworzenie pętli, która przeanalizuje wszystkie zmiany i sprawdza, czy są dostępne zmiany danych. Aby to zrobić:
- Aby uzyskać listę zmian, wywołaj funkcję
getChanges
, podając token. - Sprawdź, czy każda zmiana jest zmianą typu
UpsertionChange
czyDeletionChange
, a następnie wykonaj niezbędne operacje.- W przypadku
UpsertionChange
uwzględniaj tylko zmiany, które nie pochodzą z aplikacji do wykonywania połączeń, aby nie zaimportować danych ponownie.
- W przypadku
- Jako nowy token przypisz następny token Zmiany.
- Powtarzaj kroki 1–3, aż nie będzie żadnych zmian.
- Zapisz kolejny 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 aspektach pobierania danych, zapoznaj się ze sprawdzonymi metodami dotyczącymi synchronizowania danych.
Przetwarzanie zmian danych
Odzwierciedl te zmiany w magazynie danych aplikacji. W przypadku UpsertionChange
użyj wartości id
i lastModifiedTime
z metadata
, aby zaktualizować rekord.
W przypadku DeletionChange
użyj podanego id
, aby usunąć rekord.
Usuwanie danych z Health Connect
Gdy użytkownik usunie swoje dane z aplikacji, upewnij się, że zostały one również usunięte z Health Connect. Aby to zrobić, użyj deleteRecords
. Ta funkcja przyjmuje typ rekordu i listę wartości id
i clientRecordId
, co ułatwia grupowe usuwanie wielu danych. Dostępna jest też alternatywna wersja deleteRecords
, która przyjmuje argument timeRangeFilter
.
Sprawdzone metody synchronizowania danych
Na proces synchronizacji wpływają te czynniki.
Wygaśnięcie tokenu
Nieużywany token Changes wygasa po 30 dniach, dlatego musisz zastosować strategię synchronizacji, która zapobiegnie utracie informacji w takim przypadku. Strategia może obejmować te metody:
- Wyszukaj w danych aplikacji ostatnio wykorzystany rekord, który zawiera też dane
id
z Health Connect. - Poproś o rekordy z Health Connect, które zaczynają się od określonego sygnatury czasowej, a potem wstaw je lub zaktualizuj w danych aplikacji.
- Poproś o token zmian, aby zarezerwować go na potrzeby kolejnego użycia.
Zalecane strategie zarządzania zmianami
Jeśli w Twojej aplikacji występują nieprawidłowe lub wygasłe tokeny Changes, zalecamy zastosowanie jednej z tych strategii zarządzania w zależności od tego, jak są one używane w Twojej logice:
- Odczytaj i usuń duplikaty wszystkich danych. To najlepsza strategia.
- przechowywać sygnaturę czasową ostatniego odczytu danych z Health Connect;
- Po wygaśnięciu tokena ponownie odczytaj wszystkie dane z najnowszej sygnatury czasowej lub z ostatnich 30 dni. Następnie należy usunąć duplikaty za pomocą identyfikatorów.
- Najlepiej zaimplementować identyfikatory klienta, ponieważ są one wymagane do aktualizowania danych.
- Tylko dane odczytane od ostatniego sygnatury czasowego odczytu. Powoduje to pewne rozbieżności danych dotyczące daty wygaśnięcia tokenu zmian, ale okres ten jest krótszy i może trwać od kilku godzin do kilku dni.
- przechowywać sygnaturę czasową ostatniego odczytu danych z Health Connect;
- Po wygaśnięciu tokenu odczytuj wszystkie dane od podanej sygnatury czasowej.
- Usuń, a następnie odczytaj dane z ostatnich 30 dni. Jest to bardziej zgodne z tym, co dzieje się podczas pierwszej integracji.
- usunąć wszystkie dane odczytane przez aplikację z Health Connect w ciągu ostatnich 30 dni;
- Po usunięciu ponownie przeczytaj wszystkie te dane.
- Dane z czytanych stron z ostatnich 30 dni bez usuwania duplikatów. Jest to najmniej odpowiednia strategia, ponieważ powoduje wyświetlanie użytkownikom duplikatów danych.
- Usuń z Health Connect wszystkie dane odczytane przez aplikację w ciągu ostatnich 30 dni.
- zezwalać na zduplikowane wpisy.
Typ danych Zmień tokeny
Jeśli Twoja aplikacja korzysta z więcej niż jednego typu danych niezależnie, używaj oddzielnych tokenów zmian dla każdego typu danych. Używaj listy z wieloma typami danych w interfejsie Changes Sync API tylko wtedy, gdy te typy danych są używane razem lub wcale nie są używane.
Czytanie na pierwszym planie
Aplikacje mogą odczytywać dane z Health Connect tylko wtedy, gdy są na pierwszym planie. Podczas synchronizowania danych z Health Connect dostęp do Health Connect może zostać przerwany w dowolnym momencie. Aplikacja musi na przykład obsługiwać przerwy w pobieraniu dużych ilości danych z Health Connect w trakcie synchronizacji i kontynuować po następnym otwarciu aplikacji.
Czytanie w tle
Możesz poprosić, aby aplikacja działała w tle i czytała dane z Health Connect. Jeśli poprosisz o uprawnienia Background Read
, użytkownik może zezwolić aplikacji na odczytywanie danych w tle.
Czasy importu
Aplikacja nie może otrzymywać powiadomień o nowych danych, dlatego sprawdź je w 2 miejscach:
- Za każdym razem, gdy aplikacja staje się aktywna na pierwszym planie. W takim przypadku użyj zdarzeń cyklu życia.
- Okresowo, gdy aplikacja działa na pierwszym planie. Informować użytkowników o dostępności nowych danych, aby mogli zaktualizować ekran, uwzględniając zmiany.