Health Connect ile entegre olan çoğu uygulamanın, veri kaynağı işlevi gören kendi veri deposu vardır. Health Connect, uygulamanızı senkronize halde tutmanızı sağlayan yöntemler sunar.
Uygulamanızın aşağıdakileri yaptığından emin olun:
- Yeni veya güncellenmiş verileri uygulamanızın veri deposundan Health Connect'e aktarır.
- Health Connect'ten veri değişikliklerini alır ve bu değişiklikler uygulamanızın veri deposuna yansıtılır.
- Uygulamanızın veri deposundan silindiğinde Health Connect'teki verileri siler.
Her durumda, senkronizasyon işleminin hem Health Connect'in hem de uygulamanızın veri deposunun uyumlu olmasını sağladığından emin olun.
Health Connect'e feed verileri
Senkronizasyon işleminin ilk bölümü, uygulamanızın veri deposundan Health Connect veri deposuna veri aktarmaktır.
Verilerinizi hazırlama
Uygulamanızın veri deposundaki kayıtlar genellikle aşağıdaki ayrıntılara sahiptir:
UUID
gibi benzersiz bir anahtar.- Sürüm veya zaman damgası.
Uygulamanızın veri deposunu, Health Connect'e önceden aktarılan verileri takip edecek şekilde tasarlayın. Bunun için aşağıdaki mantığı uygulayın:
- Değişikliklerin listesini ve son jetonun yayınlanmasından bu yana güncellemeleri olan kayıtları almak için kullanılabilecek bir jeton sağlayın.
- Dışa aktarılan verilerin en son değiştirildiği zamanı izleyin.
Bu adımlar, Health Connect'e yalnızca yeni veya güncellenmiş verilerin aktarılmasını sağlamak için önemlidir.
Health Connect'e veri yazma
Health Connect'e veri aktarmak için aşağıdaki adımları uygulayın:
- Uygulamanızın veri deposundan yeni veya güncellenmiş girişlerin listesini alın.
- Her giriş için, söz konusu veri türüne uygun bir
Record
nesnesi oluşturun. Örneğin, ağırlıkla ilgili veriler için birWeightRecord
nesnesi oluşturun. Uygulamanızın veri deposundaki benzersiz anahtar ve sürüm ayrıntılarını kullanarak her bir
Record
için birMetadata
nesnesi belirtin. Verilerinizde sürüm oluşturulmamışsa alternatif olarak geçerli zaman damgasınınLong
değerini kullanabilirsiniz.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
insertRecords
kullanarak verileri Health Connect'e ekleyin. Verilerin yükseltilmesi, Health Connect'tekiclientRecordId
değerleri Health Connect veri deposunda bulunduğu veclientRecordVersion
değeri mevcut değerden yüksek olduğu sürece Health Connect'teki tüm verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, iptal edilen veriler yeni veri olarak yazılır.healthConnectClient.insertRecords(arrayListOf(record))
Veri feed'iyle ilgili pratik hususlar hakkında bilgi edinmek için Veri yazma en iyi uygulamalarına göz atın.
Health Connect kimliklerini depola
Kayıtlarınızı Health Connect'e yükselttikten sonra uygulamanızın veri deposunun her kayıt için Health Connect id
değerini depolaması gerekir. Böylece uygulamanız, verileri aldıktan sonra gelen her değişikliğin yeni bir kayıt oluşturmayı veya mevcut bir kaydı güncellemeyi gerektirip gerektirmediğini kontrol edebilir.
insertRecords
işlevi, id
değerlerinin listesini içeren bir InsertRecordsResponse
döndürür.
Kayıt Kimliklerini almak ve depolamak için yanıtı kullanın.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Health Connect'ten veri çekme
Senkronizasyon işleminin ikinci adımı, Health Connect'ten uygulamanızın veri deposuna yapılan tüm veri değişikliklerini almaktır. Veri değişiklikleri, güncellemeleri ve silme işlemlerini içerebilir.
Değişiklikler jetonu alma
Health Connect'ten alınacak değişikliklerin bir listesini almak için uygulamanızın Değişiklik jetonlarını takip etmesi gerekir. Bunları, hem veri değişikliklerinin listesini hem de gelecek sefer kullanılacak yeni bir Değişiklikler jetonu döndürmesi için Değişiklikler isteğinde bulunurken kullanabilirsiniz.
Changes (Değişiklikler) jetonu almak için getChangesToken
kodunu çağırın ve gerekli veri türlerini sağlayın.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Veri değişikliklerini kontrol etme
Değişiklikler jetonu aldığınıza göre bu jetonu tüm Değişiklikleri almak için kullanabilirsiniz. Kullanılabilir veri değişiklikleri olup olmadığını kontrol ettiği tüm Değişiklikleri uygulamak için bir döngü oluşturmanızı öneririz. Şu adımları uygulayın:
- Değişiklikler listesini almak için jetonu kullanarak
getChanges
yöntemini çağırın. - Her bir değişikliği kontrol ederek değişiklik türünün
UpsertionChange
veyaDeletionChange
olup olmadığına bakın ve gerekli işlemleri gerçekleştirin.UpsertionChange
uygulamasında, verileri yeniden içe aktarmadığınızdan emin olmak için yalnızca arama uygulamasından gelmeyen değişiklikleri yapın.
- Sonraki Changes (Değişiklikler) jetonunu yeni jetonunuz olarak atayın.
- Başka Değişiklik kalmayana kadar 1-3. adımları tekrarlayın.
- Bir sonraki jetonu saklayın ve ileride yapacağınız bir içe aktarma işlemi için ayırın.
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
}
Veri çekerken göz önünde bulundurulması gereken pratik noktaları öğrenmek için Verileri senkronize etme ile ilgili en iyi uygulamalara göz atın.
Veri değişikliklerini işleme
Uygulamanızın veri deposundaki değişiklikleri yansıtın. UpsertionChange
için, id
ve metadata
ile en üst arasındaki lastModifiedTime
kaydını kullanın.
DeletionChange
için, kaydı silmek üzere sağlanan id
özelliğini kullanın.
Health Connect'teki verileri silme
Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde bu verilerin Health Connect'ten de kaldırıldığından emin olun. Bunun için deleteRecords
aracını kullanın. Bu işlem, id
ve clientRecordId
değerlerinin kayıt türünün yanı sıra listesini alır. Bu da, birden fazla verinin silinmek üzere gruplandırılmasını kolaylaştırır. timeRangeFilter
alan alan alternatif bir deleteRecords
da mevcuttur.