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

تتضمّن معظم التطبيقات التي تتكامل مع 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، على مخزن بيانات التطبيق تخزين id Health Connect لكل سجلّ. ويسمح هذا لتطبيقك بالتحقق مما إذا كان كل تغيير وارد يتطلب إنشاء سجل جديد أو تعديل سجل حالي بعد سحب البيانات.

تعرض الدالة 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، ما يسهّل تجميع بيانات متعددة لحذفها.