डेटा सिंक करें

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. यूनीक कुंजी का इस्तेमाल करके, हर Record के साथ Metadata ऑब्जेक्ट तय करें और अपने ऐप्लिकेशन के डेटास्टोर से वर्शन विवरण. अगर आपके डेटा का वर्शन नहीं है, तो विकल्प के तौर पर, मौजूदा टाइमस्टैंप के 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. पहले से तीसरे चरण को तब तक दोहराएं, जब तक कोई बदलाव न हो जाए.
  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 में लेता है भी उपलब्ध है.

डेटा सिंक करने के सबसे सही तरीके

सिंक करने की प्रोसेस पर इन चीज़ों का असर पड़ता है.

टोकन खत्म होने की तारीख

इस्तेमाल नहीं किए गए बदलाव टोकन की समयसीमा 30 दिनों में खत्म हो जाती है. इसलिए, आपको सिंक का इस्तेमाल करना होगा जो ऐसे मामले में जानकारी को खोने से बचाती है. आपकी रणनीति यह कर सकी इसमें ये तरीके शामिल किए जा सकते हैं:

  • अपने ऐप डेटास्टोर में हाल ही में इस्तेमाल किया गया रिकॉर्ड खोजें और साथ ही को Health Connect का id मिला है.
  • Health Connect से ऐसे रिकॉर्ड का अनुरोध करें जो किसी खास कीवर्ड से शुरू होते हों टाइमस्टैंप जोड़ें और फिर उन्हें अपने ऐप्लिकेशन के डेटास्टोर में डालें या अपडेट करें.
  • इसमें बदलाव टोकन का अनुरोध करें, ताकि आप अगली बार इसे इस्तेमाल करने के लिए अपने पास रख सकें.

बदलावों को मैनेज करने के लिए सुझाई गई रणनीतियां

अगर आपका ऐप्लिकेशन अमान्य हो रहा है या बदलावों के लिए टोकन की समयसीमा खत्म हो गई है, तो हम नीचे दी गई मैनेजमेंट रणनीतियों का सुझाव दे सकते हैं. आपका तर्क:

  • पूरा डेटा पढ़ें और उसका डुप्लीकेट बनाएं. यह सबसे आदर्श रणनीति है.
    • उस समय का टाइमस्टैंप सेव करें जब उन्होंने Health Connect से पिछली बार डेटा पढ़ा था.
    • टोकन की समयसीमा खत्म होने पर, सबसे हाल ही के टाइमस्टैंप से या महीने के हिसाब से सक्रिय उपयोगकर्ताओं की संख्या डालें. फिर, इसका इस्तेमाल करके पहले पढ़े गए डेटा से उसका डुप्लीकेट बनाएं आइडेंटिफ़ायर मौजूद हैं.
    • आम तौर पर, Client-ID लागू करें, क्योंकि डेटा अपडेट करने के लिए ये ज़रूरी होते हैं.
  • सिर्फ़ आखिरी बार पढ़े गए टाइमस्टैंप के बाद का डेटा रीड करें. इस वजह से कुछ डेटा बदलाव वाले टोकन की समयसीमा खत्म होने के समय के बीच अंतर, लेकिन समयावधि छोटा है, जिसमें कुछ घंटे से कुछ दिन लग सकते हैं.
    • उस समय का टाइमस्टैंप सेव करें जब उन्होंने Health Connect से पिछली बार डेटा पढ़ा था.
    • टोकन की समयसीमा खत्म होने पर, इस टाइमस्टैंप के बाद का पूरा डेटा पढ़ें.
  • पिछले 30 दिनों का पढ़ा गया डेटा मिटाएं और फिर उसे मिटाएं. यह ज़्यादा बारीकी से अलाइन होता है जो पहले इंटिग्रेशन पर लागू होता है.
    • Health Connect ऐप्लिकेशन में, पिछले 30 दिनों का वह डेटा मिटाएं जिसे ऐप्लिकेशन ने पढ़ा है दिन.
    • मिटाए जाने के बाद, पूरा डेटा फिर से पढ़ें.
  • डुप्लीकेट किए बिना पिछले 30 दिनों का डेटा पढ़ें. यह सबसे कम आदर्श है रणनीति का इस्तेमाल किया जाता है, जिससे उपयोगकर्ताओं को डुप्लीकेट डेटा दिखता है.
    • Health Connect से, ऐप्लिकेशन में पढ़ा गया पूरा डेटा मिटाएं आखिरी 30 दिन.
    • डुप्लीकेट एंट्री की अनुमति दें.

डेटा टाइप में बदलाव के टोकन

अगर आपका ऐप्लिकेशन अलग से एक से ज़्यादा तरह के डेटा का इस्तेमाल करता है, तो अलग-अलग बदलावों का इस्तेमाल करें हर डेटा टाइप के लिए टोकन. एक से ज़्यादा डेटा टाइप की सूची का इस्तेमाल अगर इस तरह के डेटा का एक साथ इस्तेमाल किया जाता है या बिलकुल भी नहीं किया जाता है, तो Sync API बदल जाता है.

फ़ोरग्राउंड में पढ़ने की सुविधा

ऐप्लिकेशन, Health Connect का डेटा सिर्फ़ तब पढ़ सकते हैं, जब वे फ़ोरग्राउंड में हों. Health Connect से डेटा सिंक करने पर, Health Connect का ऐक्सेस सिर्फ़ किसी भी समय बाधित किया हो. उदाहरण के लिए, आपके ऐप्लिकेशन को अनचाही गतिविधियों को हैंडल करना चाहिए Health Connect से ज़्यादा डेटा पढ़ते समय, सिंक करने की सुविधा के बीच में. और अगली बार ऐप्लिकेशन खोलने पर जारी रखें.

इंपोर्ट का समय

आपके ऐप्लिकेशन को नए डेटा के बारे में सूचना नहीं मिल सकती, इसलिए दो पॉइंट पर नए डेटा की जांच करें:

  • हर बार जब आपका ऐप्लिकेशन फ़ोरग्राउंड में चालू हो जाता है. ऐसी स्थिति में, लाइफ़साइकल इवेंट.
  • समय-समय पर, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में बना रहता है. उपयोगकर्ताओं को सूचना दें, जब नया डेटा उपलब्ध है जिससे वे अपनी स्क्रीन को अपडेट करके, बदलाव.