Verileri senkronize et

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:

  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 Record ile 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. Verileri insertRecords kullanarak Health Connect'e Upsert. Verilerin yükseltilmesi, clientRecordId değerleri Health Connect veri deposunda bulunduğu ve clientRecordVersion 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:

  1. Değişiklikler listesini almak için jetonu kullanarak getChanges adlı kuruluşu çağırın.
  2. Değişiklik türünün UpsertionChange veya DeletionChange 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.
  3. Bir sonraki Changes jetonunu yeni jetonunuz olarak atayın.
  4. Başka değişiklik kalmayana kadar 1-3 arasındaki adımları tekrarlayın.
  5. 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.