Health Connect ile entegre olan çoğu uygulamanın, doğruluk kaynağı olarak hizmet veren kendi veri kümesi vardır. Health Connect, uygulamanızın senkronize kalmasını sağlayacak yöntemler sunar.
Uygulamanızın aşağıdakileri sağladığından emin olun:
- Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e besler.
- Health Connect'ten veri değişikliklerini alır ve uygulamanızın veri deposuna yansıtır.
- Uygulamanızın veri deposunda silinen veriler Health Connect'ten de silinir.
Her durumda, senkronizasyon işleminin hem Health Connect hem de uygulamanızın veri deposunun uyumlu kalmasını sağlayın.
Health Connect'e veri besleme
Senkronizasyon sürecinin ilk kısmı, uygulamanızın veri deposundaki verileri Health Connect veri deposuna beslemektir.
Verilerinizi hazırlama
Uygulamanızın veri deposundaki kayıtlar genellikle aşağıdaki ayrıntıları içerir:
UUID
gibi benzersiz bir anahtar.- Bir sürüm veya zaman damgası.
Uygulamanızın veri deposunu, Health Connect'e hangi verilerin aktarıldığını takip edecek şekilde tasarlayın. Bunu yapmak için aşağıdaki mantığı uygulayın:
- Değişikliklerin listesini ve son jetonun verildiği tarihten sonra güncellenmiş kayıtları almak için kullanılabilecek bir jeton sağlayın.
- Dışa aktarılan verilerin en son ne zaman değiştirildiğini izleyin.
Bu adımlar, Health Connect'e yalnızca yeni veya güncellenmiş verilerin aktarılmasını sağlamak için gereklidir.
Health Connect'e veri yazma
Health Connect'e veri beslemek için aşağıdaki adımları uygulayın:
- Uygulamanızın veri deposundaki 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
Record
için birMetadata
nesnesi belirtin. Verileriniz sürümlendirilmemişse 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 Health Connect'e veri ekleme. Verileri güncelleme işlemi,clientRecordId
değerleri Health Connect veri deposunda bulunduğu veclientRecordVersion
mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, yeni eklenen veriler yeni veri olarak yazılır.healthConnectClient.insertRecords(arrayListOf(record))
Veri beslemeyle ilgili pratik hususlar hakkında bilgi edinmek için Veri yazma ile ilgili en iyi uygulamalara göz atın.
Health Connect kimliklerini saklama
Kayıtlarınızı Health Connect'e ekledikten sonra uygulamanızın veri deposunun her kayıt için Health Connect id
'yi depolaması gerekir. Bu sayede uygulamanız, verileri aldıktan sonra her gelen 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 saklamak 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 alma
Senkronizasyon sürecinin ikinci kısmı, Health Connect'teki tüm veri değişikliklerini uygulamanızın veri deposuna çekmek olur. Veri değişiklikleri güncellemeler ve silme işlemlerini içerebilir.
Değişiklik jetonu alma
Health Connect'ten alınacak değişikliklerin listesini almak için uygulamanızın Değişiklikler jetonlarını takip etmesi gerekir. Hem veri değişikliklerinin listesini hem de bir sonraki sefer kullanılacak yeni bir Changes jetonunu döndürmek için Changes isterken bunları kullanabilirsiniz.
Değişiklikler jetonu almak için getChangesToken
işlevini ç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
Bir Değişiklikler jetonu edindiğinize göre tüm Değişiklikleri almak için bu jetonu kullanın. Mevcut veri değişiklikleri olup olmadığını kontrol eden bir döngü oluşturarak tüm değişiklikleri incelemenizi öneririz. Şu adımları uygulayın:
- Değişiklikler listesini almak için jetonu kullanarak
getChanges
işlevini çağırın. - Her değişikliğin
UpsertionChange
mi yoksaDeletionChange
mi olduğunu kontrol edin ve gerekli işlemleri yapın.UpsertionChange
için, verileri yeniden içe aktarmadığınızdan emin olmak amacıyla yalnızca çağıran uygulamadan gelmeyen değişiklikleri alın.
- Sonraki Changes jetonunu yeni jetonunuz olarak atayın.
- Değişiklik kalmayana kadar 1-3. adımları tekrarlayın.
- Sonraki jetonu saklayın ve gelecekte içe aktarmak 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
}
Verileri almayla ilgili pratik hususlar hakkında bilgi edinmek için Verileri senkronize etme ile ilgili en iyi uygulamalara göz atın.
Veri değişikliklerini işleme
Değişiklikleri uygulamanızın veri deposuna yansıtın. UpsertionChange
için, kaydı upsert etmek üzere id
ve metadata
'daki lastModifiedTime
öğesini kullanın.
DeletionChange
için, kaydı silmek üzere sağlanan id
değerini kullanın.
Health Connect'teki verileri silme
Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde, verilerin Health Connect'ten de kaldırıldığından emin olun. Bunu yapmak için deleteRecords
simgesini kullanın. Bu işlev, bir kayıt türü ve id
ile clientRecordId
değerlerinin listesini alır. Bu sayede, birden fazla veriyi toplu olarak silmek kolaylaşır. timeRangeFilter
alan alternatif bir deleteRecords
de kullanılabilir.
Veri senkronizasyonuyla ilgili en iyi uygulamalar
Senkronizasyon sürecini etkileyen faktörler aşağıda açıklanmıştır.
Jetonun son kullanma tarihi
Kullanılmayan Değişiklikler jetonunun süresi 30 gün içinde dolduğundan, bu tür durumlarda bilgi kaybını önleyen bir senkronizasyon stratejisi kullanmanız gerekir. Stratejinizde aşağıdaki yaklaşımları kullanabilirsiniz:
- Uygulama veri deposunuzda, Health Connect'ten
id
içeren ve en son tüketilen kaydı arayın. - Health Connect'ten belirli bir zaman damgasıyla başlayan kayıtlar isteyin ve ardından bunları uygulamanızın veri deposuna ekleyin veya güncelleyin.
- Bir sonraki sefere ihtiyaç duymanız için değişiklikler jetonu isteyin.
Önerilen değişiklikler yönetimi stratejileri
Uygulamanız geçersiz veya süresi dolmuş Değişiklikler jetonları alıyorsa mantığınızda nasıl kullanıldığına bağlı olarak aşağıdaki yönetim stratejilerini öneririz:
- Tüm verileri okuyup tekilleştirin. Bu en ideal stratejidir.
- Health Connect'ten son veri okuma işleminin zaman damgasını depolayın.
- Jetonun süresi dolduğunda, en son zaman damgasından veya son 30 günden itibaren tüm verileri yeniden okuyun. Ardından, tanımlayıcıları kullanarak daha önce okunan verilerle tekilleştirin.
- Veri güncellemeleri için gerekli olduklarından, ideal olarak Client-ID'leri uygulamanız gerekir.
- Yalnızca son okuma zaman damgasından sonraki verileri okuyun. Bu durum, değişiklikler jetonunun süresi dolma zamanı civarında bazı veri tutarsızlıklarına neden olur ancak bu süre, birkaç saat ile birkaç gün arasında değişen daha kısa bir süredir.
- Health Connect'ten son veri okuma işleminin zaman damgasını depolayın.
- Jeton süresi dolduğunda, bu zaman damgasından itibaren tüm verileri okuyun.
- Son 30 güne ait verileri silip okuma. Bu, ilk entegrasyonda gerçekleşenle daha uyumludur.
- Uygulamanın son 30 gün içinde Health Connect'ten okuduğu tüm verileri silin.
- Sildikten sonra bu verilerin tümünü tekrar okuyun.
- Son 30 güne ait verileri tekilleştirmeden okuma. Bu, en az ideal stratejidir ve kullanıcılara yinelenen verilerin gösterilmesine neden olur.
- Uygulamanın son 30 gün içinde Health Connect'ten okuduğu tüm verileri silin.
- Yinelenen girişlere izin verin.
Veri türü değişiklikleri jetonları
Uygulamanız birden fazla veri türünü bağımsız olarak kullanıyorsa her veri türü için ayrı Değişiklik Jetonları kullanın. Değişiklik Senkronizasyonu API'sinde birden fazla veri türü listesini yalnızca bu veri türleri birlikte tüketiliyorsa veya hiç tüketilmiyorsa kullanın.
Ön planda okuma
Uygulamalar, Health Connect'teki verileri yalnızca ön plandayken okuyabilir. Health Connect'teki veriler senkronize edilirken Health Connect'e erişim herhangi bir noktada kesintiye uğrayabilir. Örneğin, uygulamanız Health Connect'ten büyük miktarda veri okurken senkronizasyonun ortasında kesintileri yönetmeli ve uygulama bir sonraki açıldığında devam etmelidir.
Arka planda okuma
Uygulamanızın arka planda çalışmasını ve Health Connect'ten veri okumasını isteyebilirsiniz. Background Read
iznini talep ederseniz kullanıcınız, uygulamanıza arka planda veri okuma izni verebilir.
Zamanlamaları içe aktarma
Uygulamanız yeni verilerle ilgili bildirim alamayacağından yeni verileri iki noktada kontrol edin:
- Uygulamanız ön planda etkinleştirildiğinde. Bu durumda yaşam döngüsü etkinliklerini kullanın.
- Uygulamanız ön plandayken düzenli aralıklarla Yeni veriler olduğunda kullanıcıları bilgilendirerek ekranlarını değişiklikleri yansıtacak şekilde güncellemelerine olanak tanıyın.