Verileri senkronize et

Health Connect ile entegre olan çoğu uygulamanın, doğru 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:

  • Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e aktarır.
  • Health Connect'ten veri değişikliklerini alır ve bu değişiklikleri uygulamanızın veri deposuna yansıtır.
  • Uygulamanızın veri deposundan silindiğinde Health Connect'teki verileri siler.

Her durumda, senkronizasyon işleminin Health Connect ile 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. Bunu başarmak 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ı izler.

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:

  1. Uygulamanızın veri deposundan yeni veya güncellenen girişlerin bir listesini alın.
  2. 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 bir WeightRecord nesnesi oluşturun.
  3. Uygulamanızın veri deposundaki benzersiz anahtar ve sürüm ayrıntılarını kullanarak her bir Record için bir Metadata nesnesi belirtin. Verilerinizde sürüm belirtilmemişse alternatif olarak geçerli zaman damgasının Long 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
    )
    
  4. insertRecords kullanarak verileri Health Connect'e ekleyin. Verileri yükseltme, clientRecordId değerleri Health Connect veri deposunda bulunduğu ve clientRecordVersion değeri mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, yeni sürüme geçirilen veriler yeni veri olarak yazılır.

    healthConnectClient.insertRecords(arrayListOf(record))
    

Veri feed'iyle ilgili göz önünde bulundurulması gereken 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 deposunu 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. Yanıtı kullanarak kayıt kimliklerini alın ve saklayı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 işleminin ikinci bölümü, Health Connect'teki herhangi bir veri değişikliklerini uygulamanızın veri deposuna çekmektir. Veri değişiklikleri, güncellemeleri 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şiklik jetonlarını takip etmesi gerekir. Hem veri değişiklikleri listesini hem de sonraki sefer kullanılacak yeni bir Değişiklikler jetonunu döndürecek şekilde Değişiklikler isteğinde bulunurken bunları kullanabilirsiniz.

Changes 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

Değişiklikler jetonu aldığınıza göre bu jetonu tüm Değişiklikleri almak için kullanabilirsiniz. Mevcut 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:

  1. Değişiklik listesini almak için jetonu kullanarak getChanges aracını çağırın.
  2. Her bir değişikliği kontrol ederek değişiklik türünün UpsertionChange veya DeletionChange olup olmadığına bakın ve gerekli işlemleri gerçekleştirin.
    • UpsertionChange söz konusu olduğunda, verileri yeniden içe aktarmadığınızdan emin olmak için yalnızca arama uygulamasından gelmeyen değişiklikleri alın.
  3. Sonraki Değişiklikler jetonunu yeni jetonunuz olarak atayın.
  4. Hiçbir değişiklik kalmayana kadar 1-3 arasındaki adımları tekrarlayın.
  5. Bir sonraki jetonu saklayı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 göz önünde bulundurulması gereken 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 ile başlayan id ve lastModifiedTime öğelerini kullanarak kaydı yükseltin. DeletionChange söz konusu olduğunda kaydı silmek için sağlanan id kodunu 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. Bunun için deleteRecords aracını kullanın. Bu işlem, id ve clientRecordId değerlerinin listesini alır. Böylece, birden fazla verinin silinmesi için grup işlemi kolaylaşır.