Health Connect ile entegre olan çoğu uygulamanın doğru kaynak işlevi gören kendi veri deposu vardır. Health Connect, uygulamanızı senkronize halde tutmanın yollarını sunar.
Uygulamanızın şunları yaptığından emin olun:
- Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e aktarır.
- Health Connect'teki 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 silindikten sonra Health Connect'teki veriler silinir.
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 veri feed'i verileri
Senkronizasyon sürecinin ilk adımı, verileri uygulamanızın veri deposundan Health Connect veri deposuna 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 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 ne zaman değiştirildiğini izleyin.
Bu adımlar, Health Connect'e yalnızca yeni veya güncellenen verilerin yayınlandığından emin olmak için gereklidir.
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
Record
ile 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 )
Verileri
insertRecords
kullanarak Health Connect'e Upsert. Verilerin yükseltilmesi,clientRecordId
değerleri Health Connect veri deposunda bulunduğu veclientRecordVersion
mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut tüm verilerin üzerine yazılır. Aksi takdirde, değiştirilen 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 depolama
Kayıtlarınız Health Connect'e eklendikten sonra, uygulamanızın veri deposunun her kayıt için Health Connect id
öğesini depolaması gerekir. Böylece uygulamanız, verileri aldıktan sonra gelen her değişikliğin yeni bir kayıt oluşturulmasını veya mevcut bir kaydın güncellenmesini gerektirip gerektirmediğini kontrol edebilir.
insertRecords
işlevi, id
değerlerinin listesini içeren bir InsertRecordsResponse
döndürür.
Yanıtı kullanarak Kayıt Kimliklerini alın ve depolayı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 adımı ise Health Connect'ten uygulamanızın veri deposuna aktarılan veri değişikliklerini alıp almamaktır. Veri değişiklikleri, güncelleme 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 bir listesini hem de bir sonraki sefer kullanılacak yeni bir Değişiklikler jetonu döndürmek için Değişiklik isteğinde bulunurken bunları kullanabilirsiniz.
Değişiklikler jetonu almak için getChangesToken
numaralı telefonu arayın ve gerekli veri türlerini sağlayın.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
Veri değişikliklerini kontrol etme
Artık bir Değişiklik jetonu aldığınıza göre bu jetonu kullanarak tüm değişiklikleri alabilirsiniz. Mevcut veri değişiklikleri olup olmadığını kontrol eden tüm Değişiklikleri gözden geçirmek için bir döngü oluşturmanızı öneririz. Şu adımları uygulayın:
- Değişiklikler listesini almak için jetonu kullanarak
getChanges
adlı kuruluşu çağırın. - Değişiklik türünün
UpsertionChange
veyaDeletionChange
olup olmadığını kontrol edip 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 alın.
- Bir sonraki Changes jetonunu yeni jetonunuz olarak atayın.
- Başka değişiklik kalmayana kadar 1-3 arasındaki adımları tekrarlayın.
- Bir sonraki jetonu depolayın ve gelecekteki 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 çekmeyle 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
Uygulamanızın veri deposundaki değişiklikleri yansıtın. UpsertionChange
için, metadata
değerinden üst değerine kadar id
ve lastModifiedTime
değerlerini kullanın.
DeletionChange
için, kaydı silmek üzere sağlanan id
değerini kullanın.
Health Connect'ten veri silme
Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde, bu verilerin Health Connect'ten de kaldırıldığından emin olun. Bunu yapmak için deleteRecords
kullanın. Bu işlem, bir kayıt türü ile id
ve clientRecordId
değerlerini içeren bir liste gerektirir. Böylece birden çok verinin toplu silinmesi kolaylaşır. timeRangeFilter
gerektiren alternatif bir deleteRecords
da mevcuttur.
Verileri senkronize etmek için en iyi uygulamalar
Aşağıdaki faktörler senkronizasyon işlemini etkiler.
Jetonun son kullanma tarihi
Kullanılmayan bir Değişiklik jetonunun süresi 30 gün içinde sona ereceğinden bu tür bir durumda bilgi kaybını önleyen bir senkronizasyon stratejisi kullanmanız gerekir. Stratejiniz aşağıdaki yaklaşımları içerebilir:
- Uygulamanızın veri deposunda, en son tüketilen ve Health Connect'ten
id
alınan kaydı bulun. - Belirli bir zaman damgasıyla başlayan ve Health Connect'ten kayıt isteğinde bulunan bu kayıtları uygulamanızın veri deposuna ekleyin veya güncelleyin.
- Bir dahaki sefere ihtiyacınız olduğunda rezerve etmek için bir Değişiklik jetonu isteyin.
Önerilen Değişiklik yönetimi stratejileri
Uygulamanız geçersiz veya süresi dolmuş Değişiklikler jetonları alıyorsa mantığınıza göre aşağıdaki yönetim stratejilerini kullanmanızı öneririz:
- Tüm verileri okuma ve tekilleştirme. Bu en ideal stratejidir.
- Çocuğunuzun Health Connect'ten en son ne zaman veri okuduğunu gösteren zaman damgasını depolayın.
- Jeton süresi dolduğunda, en yakın zaman damgasına veya son 30 güne ait tüm verileri tekrar okuyun. Ardından, tanımlayıcıları kullanarak bu verileri önceden okunmuş verilerle karşılaştırarak tekilleştirin.
- Veri güncellemeleri için gerekli olduğundan bu kimlikleri tercih etmeniz önerilir.
- Yalnızca son okuma zaman damgasından bu yana okunan veriler. Bu durum, Değişiklikler jetonunun geçerlilik süresi civarında bazı veri tutarsızlıklarına yol açsa da bu süre daha kısadır ve birkaç saat ila birkaç gün sürebilir.
- Çocuğunuzun Health Connect'ten en son ne zaman veri okuduğunu gösteren zaman damgasını depolayın.
- Jeton sona erdiğinde, bu zaman damgasından sonraki tüm verileri okuyun.
- Silin, ardından son 30 güne ait verileri okuyun. Bu, ilk entegrasyonda olacaklarla daha uyumlu olur.
- Son 30 gün içinde uygulamanın Health Connect'ten okuduğu tüm verileri siler.
- Silindikten sonra tüm bu verileri tekrar okuyun.
- Tekilleştirme yapmadan son 30 güne ait verileri okuma. Bu, en az ideal stratejidir ve kullanıcılara yinelenen veriler gösterilmesine neden olur.
- Son 30 gün içinde uygulamanın Health Connect'ten okuduğu tüm verileri silme
- Yinelenen girişlere izin verin.
Veri türü değişiklikleri jetonları
Uygulamanız bağımsız olarak birden fazla veri türü kullanıyorsa her veri türü için ayrı Değişiklik Jetonları kullanın. Bu veri türleri birlikte tüketilirse veya hiç tüketilmezse Changes Sync API ile birden fazla veri türünden oluşan bir liste kullanın.
Ön plan okumaları
Uygulamalar yalnızca ön plandayken Health Connect'teki verileri okuyabilir. Health Connect'ten veri senkronize ederken Health Connect'e erişim herhangi bir noktada kesilebilir. Örneğin, uygulamanız Health Connect'ten büyük miktarda veri okurken senkronizasyon sırasında kesintileri işlemeli ve uygulama tekrar açıldığında devam etmelidir.
İçe aktarma zamanlamaları
Uygulamanız yeni verilerden haberdar olamayacağı için yeni verileri iki noktada kontrol edin:
- Uygulamanız ön planda her etkin hale geldiğinde. Bu durumda, yaşam döngüsü etkinliklerini kullanın.
- Uygulamanız ön planda kaldığında düzenli olarak. Yeni veriler hazır olduğunda kullanıcıları bilgilendirin. Böylece, ekranlarını değişiklikleri yansıtacak şekilde güncelleyebilirler.