Sincronizza dati

La maggior parte delle app che si integrano con Connessione Salute hanno un proprio datastore che funge da fonte di dati. Connessione Salute ti offre diversi modi per mantenere la tua app sincronizzati.

Assicurati che la tua app:

  • Trasferisci i dati nuovi o aggiornati del datastore della tua app a Connessione Salute.
  • Recupera le modifiche ai dati da Connessione Salute, che si riflettono nella tua datastore dell'app.
  • Elimina i dati da Connessione Salute quando vengono eliminati nel datastore dell'app.

In ogni caso, assicurati che il processo di sincronizzazione conservi sia Connessione Salute sia allineato al datastore dell'app.

Dai un feed di dati a Connessione Salute

La prima parte del processo di sincronizzazione consiste nell'fornire dati dal datastore dell'app al datastore di Connessione Salute.

Prepara i dati

In genere, i record nel datastore dell'app hanno i seguenti dettagli:

  • Una chiave univoca, ad esempio UUID.
  • Una versione o un timestamp.

Progetta il datastore della tua app per tenere traccia dei dati già inviati Connessione Salute. A questo scopo, applica la seguente logica:

  • Fornisci un elenco delle modifiche e un token che può essere utilizzato per recuperare i record con aggiornamenti dall'emissione dell'ultimo token.
  • Monitora l'ultima volta che i dati esportati sono stati modificati.

Questi passaggi sono essenziali per garantire che vengano inviati solo dati nuovi o aggiornati Connessione Salute.

Scrivi dati in Connessione Salute

Per inserire dati in Connessione Salute, svolgi i seguenti passaggi:

  1. Ottieni un elenco di voci nuove o aggiornate dal datastore della tua app.
  2. Per ogni voce, crea un oggetto Record appropriato per quel tipo di dati. Ad esempio, crea un oggetto WeightRecord per i dati relativi al peso.
  3. Specifica un oggetto Metadata con ogni Record utilizzando la chiave univoca e i dettagli della versione dal datastore dell'app. Se i dati non sono sottoposti a controllo delle versioni, puoi utilizzare il valore Long del timestamp corrente come alternativa.

    val record = WeightRecord(
        metadata = Metadata(
            clientRecordId = "<Your record's Client ID>",
            clientRecordVersion = <Your record's version>
        ),
        weight = weight,
        time = time,
        zoneOffset = zoneOffset
    )
    
  4. Esegui l'upsert dei dati a Connessione Salute utilizzando insertRecords L'upsert dei dati significa che qualsiasi i dati di Connessione Salute vengono sovrascritti finché l'clientRecordId sono presenti nel datastore di Connessione Salute e clientRecordVersion è superiore al valore esistente. In caso contrario, i dati sottoposti a upserted vengono scritti come nuovi dati.

    healthConnectClient.insertRecords(arrayListOf(record))
    

Per conoscere le considerazioni pratiche per l'inserimento di dati, consulta le pratiche per la Scrittura di dati.

ID di Connessione Salute del negozio

Dopo aver eseguito l'upsert dei tuoi record a Connessione Salute, il datastore della tua app deve archivia l'id di Connessione Salute per ogni record. L'app può controllare se ogni modifica in arrivo richiede la creazione di un nuovo record oppure aggiornare un record esistente, dopo aver eseguito il pull dei dati.

La funzione insertRecords restituisce un InsertRecordsResponse che contiene l'elenco di id valori. Utilizza la risposta per ottenere gli ID record e archiviarli.

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

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

Estrai i dati da Connessione Salute

La seconda parte del processo di sincronizzazione consiste nel recuperare eventuali modifiche dei dati Connessione Salute al datastore dell'app. Le modifiche ai dati possono includere aggiornamenti le eliminazioni.

Recuperare un token per le modifiche

Per ottenere un elenco delle modifiche da recuperare da Connessione Salute, la tua app deve mantenere traccia dei token Changes. Puoi utilizzarle quando richiedi modifiche a restituiscono sia un elenco di modifiche ai dati sia un nuovo token Modifiche da utilizzare successivamente nel tempo.

Per ottenere un token Modifiche, chiama getChangesToken e fornire i tipi di dati richiesti.

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

Verificare la presenza di modifiche ai dati

Ora che hai ottenuto un token Modifiche, utilizzalo per ottenere tutte le Modifiche. Consigliamo di creare un loop per vedere tutte le modifiche in cui controlla se ci sono modifiche ai dati disponibili. Ecco la procedura:

  1. Chiama getChanges utilizzando il token per ottenere un elenco di Modifiche.
  2. Controllare ogni modifica per capire se il tipo di modifica UpsertionChange o DeletionChange e eseguire le operazioni necessarie.
    • Per UpsertionChange, accetta solo le modifiche che non provengono da per assicurarti di non reimportare i dati.
  3. Assegna il token Modifiche successivo come nuovo token.
  4. Ripeti i passaggi da 1 a 3 finché non ci sono più Modifiche.
  5. Archivia il token successivo e prenotalo per un'importazione futura.
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
}

Per conoscere le considerazioni pratiche per l'estrazione dei dati, dai un'occhiata alle pratiche per la sincronizzazione dei dati.

Elabora le modifiche ai dati

Applica le modifiche al datastore dell'app. Per UpsertionChange, usa id e lastModifiedTime da metadata per potenziare il record. Per DeletionChange, utilizza il id fornito per eliminare il record.

Elimina i dati da Connessione Salute

Quando un utente elimina i propri dati dalla tua app, assicurati che siano anch'esso rimosso da Connessione Salute. Utilizza deleteRecords per eseguire questa operazione. Questa operazione richiede un tipo di record e un elenco di id e clientRecordId , il che rende conveniente raggruppare più dati per l'eliminazione. Un un'alternativa deleteRecords che accetta timeRangeFilter .

Best practice per la sincronizzazione dei dati

Il processo di sincronizzazione è influenzato dai seguenti fattori.

Scadenza del token

Poiché un token Modifiche inutilizzato scade entro 30 giorni, devi utilizzare un strategia che eviti di perdere informazioni in questo caso. La tua strategia potrebbe includono i seguenti approcci:

  • Cerca nel datastore dell'app il record utilizzato più di recente che ha un id di Connessione Salute.
  • Richiedi da Connessione Salute i record che iniziano con uno specifico e quindi inseriscili o aggiornali nel datastore dell'app.
  • Richiedi un token delle modifiche per prenotarlo per la prossima volta in cui sarà necessario.

Strategie consigliate per la gestione delle modifiche

Nel caso in cui l'app riceva token Modifiche non validi o scaduti, consigliano le seguenti strategie di gestione a seconda della loro applicazione la tua logica:

  • Leggere e deduplicare tutti i dati. Questa è la strategia ideale.
    • Archivia il timestamp dell'ultima lettura di dati di Connessione Salute.
    • Alla scadenza del token, rileggi tutti i dati dal timestamp più recente o per gli ultimi 30 giorni. Quindi, deduplicali in base ai dati letti in precedenza utilizzando o identificatori univoci.
    • Idealmente, implementa gli ID client poiché sono necessari per gli aggiornamenti dei dati.
  • Solo i dati letti dal timestamp dell'ultima lettura. Ciò porta ad alcuni dati discrepanze relative alla scadenza del token delle modifiche, ma il periodo di tempo è più breve e potrebbe richiedere da qualche ora a un paio di giorni.
    • Archivia il timestamp dell'ultima lettura di dati di Connessione Salute.
    • Alla scadenza del token, leggi tutti i dati a partire da questo timestamp.
  • Elimina e leggi i dati degli ultimi 30 giorni. Questo rispecchia meglio a ciò che accade con la prima integrazione.
    • Elimina da Connessione Salute tutti i dati letti dall'app negli ultimi 30 giorni.
    • Dopo averli eliminati, leggi di nuovo tutti questi dati.
  • Leggi i dati degli ultimi 30 giorni senza deduplicazione. Questo è il livello minimo ideale e determina la visualizzazione di dati duplicati agli utenti.
    • Elimina tutti i dati letti dall'app da Connessione Salute per ultimi 30 giorni.
    • Consenti voci duplicate.

Token delle modifiche al tipo di dati

Se la tua app utilizza più di un tipo di dati in modo indipendente, usa modifiche separate Token per ogni tipo di dati. Utilizza un elenco di più tipi di dati solo con il campo Modifica l'API Sync se questi tipi di dati vengono utilizzati insieme o non vengono utilizzati affatto.

Letture in primo piano

Le app possono leggere i dati di Connessione Salute solo quando sono in primo piano. Quando sincronizzi i dati da Connessione Salute, l'accesso a Connessione Salute potrebbe essere interrotto in qualsiasi momento. Ad esempio, l'app deve gestire le interruzioni durante una sincronizzazione durante la lettura di una grande quantità di dati da Connessione Salute, e continua all'apertura successiva dell'app.

Tempi di importazione

Poiché la tua app non può ricevere notifiche relative ai nuovi dati, controlla la presenza di nuovi dati in due punti:

  • Ogni volta che la tua app diventa attiva in primo piano. In questo caso, utilizza degli eventi del ciclo di vita.
  • Periodicamente, mentre l'app rimane in primo piano. Invia una notifica agli utenti quando sono disponibili nuovi dati, che consentono di aggiornare lo schermo per riflettere modifiche.