Verileri senkronize et

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:

  1. Uygulamanızın veri deposundan yeni veya güncellenmiş girişlerin 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 oluşturulmamışsa 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. Verilerin yükseltilmesi, Health Connect'teki 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 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:

  1. Değişiklikler listesini almak için jetonu kullanarak getChanges yöntemini ç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 uygulamasında, verileri yeniden içe aktarmadığınızdan emin olmak için yalnızca arama uygulamasından gelmeyen değişiklikleri yapın.
  3. Sonraki Changes (Değişiklikler) jetonunu yeni jetonunuz olarak atayın.
  4. Başka Değişiklik kalmayana kadar 1-3. adımları tekrarlayın.
  5. 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.