مزامنة البيانات

تتضمّن معظم التطبيقات التي يتم دمجها مع Health Connect مخزن بيانات خاصًا بها يكون بمثابة مصدر الحقيقة. يوفّر Health Connect طرقًا للحفاظ على مزامنة تطبيقك.

تأكّد من أنّ تطبيقك يُجري ما يلي:

  • خلاصات البيانات الجديدة أو المعدّلة من مخزن بيانات تطبيقك إلى Health Connect.
  • يسحب تغييرات البيانات من Health Connect، والتي تنعكس في مخزن بيانات التطبيق.
  • يتم حذف البيانات من Health Connect عند حذفها في مخزن بيانات تطبيقك.

في كل حالة، تأكَّد من توافق عملية المزامنة مع تطبيق Health Connect ومخزن بيانات تطبيقك.

بيانات الخلاصة في Health Connect

الخطوة الأولى من عملية المزامنة هي تغذية البيانات من مخزن بيانات تطبيقك إلى مخزن بيانات Health Connect.

إعداد بياناتك

تحتوي السجلات في مخزن بيانات تطبيقك عادةً على التفاصيل التالية:

  • مفتاحًا فريدًا، مثل UUID
  • نسخة أو طابع زمني

صمم مخزن بيانات تطبيقك لتتبع البيانات التي تم إدخالها بالفعل إلى Health Connect. لتحقيق ذلك، قم بتطبيق المنطق التالي:

  • وقدِّم قائمة بالتغييرات ورمزًا مميزًا يمكن استخدامه لاسترداد السجلات التي تحتوي على تعديلات منذ إصدار آخر رمز مميّز.
  • تتبع آخر مرة تم فيها تعديل البيانات المصدَّرة.

هذه الخطوات ضرورية لضمان إدخال البيانات الجديدة أو المعدّلة فقط إلى Health Connect.

كتابة البيانات في Health Connect

لإضافة البيانات إلى Health Connect، اتّبِع الخطوات التالية:

  1. احصل على قائمة بالإدخالات الجديدة أو المعدّلة من مخزن بيانات تطبيقك.
  2. بالنسبة إلى كل إدخال، أنشِئ عنصر Record مناسبًا لهذا النوع من البيانات. على سبيل المثال، يمكنك إنشاء عنصر WeightRecord للبيانات ذات الصلة بالوزن.
  3. حدِّد عنصر Metadata مع كل Record باستخدام المفتاح الفريد وتفاصيل الإصدار من مخزن بيانات تطبيقك. إذا لم يتم تحديد إصدار لبياناتك، يمكنك استخدام القيمة Long للطابع الزمني الحالي كبديل.

    val record = WeightRecord(
        metadata = Metadata(
            clientRecordId = "<Your record's Client ID>",
            clientRecordVersion = <Your record's version>
        ),
        weight = weight,
        time = time,
        zoneOffset = zoneOffset
    )
    
  4. يمكنك إعادة تحميل البيانات إلى Health Connect باستخدام insertRecords. تعني ضمان البيانات أنّه يتم استبدال أي بيانات حالية في Health Connect طالما أنّ قيم clientRecordId متوفرة في مخزن بيانات Health Connect، وأن قيمة clientRecordVersion أعلى من القيمة الحالية. بخلاف ذلك، تتم كتابة البيانات المعززة كبيانات جديدة.

    healthConnectClient.insertRecords(arrayListOf(record))
    

للتعرّف على الاعتبارات العملية لخلاصة البيانات، اطّلِع على أفضل الممارسات لكتابة البيانات.

أرقام تعريف Store Health Connect

بعد تأكيد سجلّاتك في Health Connect، يحتاج مخزن بيانات تطبيقك إلى تخزين تطبيق Health Connect id لكل سجلّ. ويتيح هذا لتطبيقك التحقّق مما إذا كان كل تغيير وارد يتطلب إنشاء سجلّ جديد، أو تعديل سجلّ حالي، بعد سحب البيانات.

تعرض الدالة insertRecords InsertRecordsResponse تحتوي على قائمة من قيم id. يمكنك استخدام الرد للحصول على أرقام تعريف السجلّات وتخزينها.

val response = healthConnectClient.insertRecords(arrayListOf(record))

for (recordId in response.recordIdsList) {
    // Store recordId to your app's datastore
}

سحب البيانات من Health Connect

الجزء الثاني من عملية المزامنة هو سحب أي تغييرات في البيانات من Health Connect إلى مخزن بيانات تطبيقك. يمكن أن تشمل تغييرات البيانات تعديلات وعمليات حذف.

الحصول على رمز مميز للتغييرات

للحصول على قائمة بالتغييرات التي يمكن سحبها من Health Connect، يجب أن يتتبّع تطبيقك رموز التغييرات المميّزة. يمكنك استخدامها عند طلب التغييرات لعرض كل من قائمة بالتغييرات في البيانات والرمز المميز الجديد للتغييرات الذي سيتم استخدامه في المرة القادمة.

للحصول على رمز مميَّز للتغييرات، يمكنك طلب الرمز getChangesToken وتوفير أنواع البيانات المطلوبة.

val changesToken = healthConnectClient.getChangesToken(
    ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)

التحقّق من تغييرات البيانات

الآن بعد أن حصلت على الرمز المميز للتغييرات، يمكنك استخدامه للاطّلاع على جميع التغييرات. نقترح إنشاء حلقة تكرار للاطّلاع على جميع التغييرات التي يتم فيها التحقّق من حدوث تغييرات في البيانات. في ما يلي الخطوات التي يجب اتّباعها:

  1. يمكنك الاتصال بالرقم getChanges باستخدام الرمز المميّز للحصول على قائمة بالتغييرات.
  2. تحقَّق من كل تغيير إذا كان نوعه UpsertionChange أو DeletionChange، ونفِّذ العمليات اللازمة.
    • بالنسبة إلى UpsertionChange، لا يمكنك تنفيذ التغييرات غير تلك التي لم تنتج عن تطبيق الاتصال للتأكّد من عدم إعادة استيراد البيانات
  3. عيِّن الرمز المميز التالي التغييرات كرمز مميز جديد.
  4. كرِّر الخطوات من 1 إلى 3 إلى أن تنتهي أي تغييرات.
  5. يمكنك تخزين الرمز المميّز التالي وحجزه لاستيراده في المستقبل.
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
}

للتعرّف على الاعتبارات العملية لسحب البيانات، يمكنك الاطّلاع على أفضل الممارسات لمزامنة البيانات.

معالجة تغييرات البيانات

تعكس التغييرات التي طرأت على مخزن بيانات تطبيقك. بالنسبة إلى UpsertionChange، استخدِم id وlastModifiedTime من metadata إلى إرسال السجلّ. بالنسبة إلى DeletionChange، استخدِم id المقدَّم لحذف السجلّ.

حذف البيانات من Health Connect

عندما يحذف المستخدم بياناته من تطبيقك، تأكَّد من إزالة هذه البيانات أيضًا من Health Connect. استخدِم deleteRecords لإجراء ذلك. يستخدم هذا الإجراء نوع سجلّ وقائمة بقيمتَي id وclientRecordId، ما يسهّل تجميع بيانات متعدّدة لحذفها. ويتوفّر أيضًا بديل deleteRecords يمكن استخدامه في timeRangeFilter.