HealthKit es sencillo y práctico
HealthKit proporciona un depósito central de datos de salud y fitness en iPhone y Apple Watch. Con el permiso del usuario, las aplicaciones se comunican con la tienda HealthKit para acceder y *compartir estos datos
El marco HealthKit está diseñado para compartir datos entre aplicaciones de manera significativa. El marco limita los tipos de datos y unidades a una lista predefinida, asegurando que todas las aplicaciones comprendan lo que significan los datos y cómo utilizarlos. Los desarrolladores no pueden crear celdas o tipos de datos personalizados. Por el contrario, HealthKit proporciona una variedad de tipos y unidades de datos.
Además, el marco utiliza una gran cantidad de subclases, lo que da como resultado una jerarquía profunda similar a la de clases. A menudo, existen diferencias sutiles pero importantes entre estas clases. Por ejemplo, el objeto HKQuantitySample se usa para almacenar datos con valores numéricos, mientras que el objeto HKCategorySample se usa para almacenar valores seleccionados de una enumeración.
HealthKit guarda una variedad de tipos de datos:
La clase HKObject es la clase principal de todos los tipos de muestra de HealthKit. Todas las subclases de HKObject son inmutables. Cada objeto tiene las siguientes propiedades:
La clase HKSample es una subclase de HKObject. Los objetos de muestra representan datos en un momento específico y todos los objetos de muestra son subclases de la clase HKSample.
HKSample se divide a su vez en cuatro subclases específicas:
El almacenamiento de HealthKit es seguro para subprocesos y la mayoría de los objetos de HealthKit son inmutables. En general, HealthKit se puede utilizar de forma segura en un entorno de subprocesos múltiples.
Antes de usar HealthKit, debes realizar los siguientes pasos:
Antes de usar HealthKit, debes agregar la funcionalidad HealthKit a tu aplicación. En Xcode, seleccione el proyecto y active la función HealthKit
Llame al método isHealthDataAvailable para asegurarse de que HealthKit esté disponible en el dispositivo del usuario.
Llame a este método antes de llamar a otros métodos de HealthKit. Si no hay HealthKit en el dispositivo (por ejemplo, en un iPad), llamar a otros métodos informará un error errorHealthDataUnavailable; si HealthKit está restringido (por ejemplo, en un entorno empresarial), llamar a otros métodos informará un error errorHealthDataRestricted.
Si HealthKit está disponible y activado, cree una instancia de un objeto HKHealthStore:
Cada aplicación solo necesita una tienda HealthKit, que es un objeto de larga duración.
Para proteger la privacidad del usuario, HealthKit requiere una autorización detallada. Debe solicitar permiso para leer y compartir los datos antes de intentar guardarlos y acceder a ellos.
Además, es necesario configurar dos claves en el archivo info.plist:
Si el usuario acepta compartir un determinado tipo de datos, puede crear una muestra de ese tipo. y guárdelo en la tienda HealthKit. Sin embargo, antes de guardar cualquier dato, es una buena idea llamar al método AuthorizationStatusForType: para verificar si tiene el permiso. Si no se ha solicitado el permiso, al guardar los datos se generará un error HKErrorAuthorizationNotDetermined. Si el usuario niega la solicitud de permiso, intentar guardar los datos generará un error HKErrorAuthorizationDenied.
Para proteger la privacidad del usuario, nuestra aplicación no sabrá si el usuario ha autorizado o denegado el permiso para leer HealthKit.
Si el usuario se niega, al consultar datos de HealthKit, solo se devolverán los datos de muestra que nuestra propia aplicación guardó con éxito en la tienda HealthKit.
Si la aplicación necesita acceder a datos de registros clínicos específicos para funcionar correctamente, agregue la clave NSHealthRequiredReadAuthorizationTypeIdentifiers al archivo info.plist. Esta clave define los tipos de datos para los que la aplicación debe tener permisos de lectura.
Nuestra aplicación puede crear nuevas muestras y guardarlas en HealthKit Store. Aunque todos los tipos de muestra siguen un proceso similar, cada tipo tiene sus propias variaciones:
Cada subclase de HKSample tiene su propio método conveniente para crear instancias de objetos.
Para muestras de cantidad, cree una instancia de la clase HKQuantity. Las unidades de la cantidad deben corresponder a las unidades descritas en la documentación del identificador de tipo. Por ejemplo, HKQuantityTypeIdentifierHeight declara unidades de longitud, por lo que la cantidad debe estar en centímetros, metros, pies o pulgadas u otras unidades compatibles. Consulte HKQuantitySample
Para muestras de categorías, el valor de la muestra debe corresponder a la enumeración declarada en el documento de identificador de tipo. Por ejemplo, HKCategoryTypeIdentifierSleepAnalysis indica que utiliza la enumeración HKCategoryValueSleepAnalysis. Por lo tanto, al crear esta muestra, se debe seleccionar un valor de esta enumeración. Para obtener más información, consulte HKCategorySample
Al guardar datos en HealthKit Store, a menudo es necesario elegir entre usar una sola muestra para representar los datos o dividir los datos en varias muestras más pequeñas. Desde una perspectiva de rendimiento, usar una sola muestra es mejor; sin embargo, varias muestras pueden brindar a los usuarios una comprensión más detallada de cómo cambian sus datos con el tiempo. La situación ideal es poder encontrar el tamaño de muestra adecuado para proporcionar datos históricos útiles al usuario.
Al registrar datos de ejercicio, se pueden utilizar datos de alta frecuencia (una muestra por minuto) para proporcionar iconos de intensidad y analizar de otro modo el rendimiento del usuario en el ejercicio. Para actividades menos intensivas, como los pasos diarios, suele ser mejor una muestra de una hora o menos.
Las aplicaciones deben evitar almacenar muestras durante 24 horas o más.
La aplicación Health permite a los usuarios acceder a todos los datos de su tienda HealthKit. Los usuarios pueden ver, agregar, eliminar y administrar sus datos.
Específicamente, los usuarios pueden
Por lo tanto, las aplicaciones de salud tienen algunas implicaciones importantes para el desarrollo de HealthKit. Los usuarios pueden modificar datos fuera de nuestra aplicación e incluso modificar los permisos de lectura y escritura de nuestra aplicación. Por lo tanto, nuestra aplicación siempre debe consultar los datos actuales en HealthKit Store.
En segundo lugar, también podemos modificar los datos en. la aplicación de salud Vea los datos que nuestra aplicación guarda en la Tienda de salud. Esto es útil en las primeras pruebas.
Hay tres formas principales de leer datos de HealthKit Store.
Las consultas devuelven la instantánea actual de los datos en HealthKit Store. Todas las consultas se ejecutan en colas anónimas en segundo plano. Cuando se complete la consulta, procesará los resultados en la cola en segundo plano. HealthKit proporciona diferentes tipos de consultas para devolver diferentes tipos de datos.
Las consultas de larga duración se ejecutarán continuamente en una cola anónima en segundo plano y actualizarán nuestra aplicación cuando se realicen cambios en HealthKit Store. Además, las consultas de los observadores se pueden registrar para su entrega en segundo plano. De esta manera, HealthKit activará nuestra aplicación en segundo plano cuando se produzca una actualización.
HealthKit proporciona las siguientes consultas de larga duración:
HealthKit utiliza subclases de HKObjectType para identificar diferentes tipos de datos almacenados en HealthKit:
Al crear objetos de tipo, usted Debe llamar al método de clase HKObjectType correspondiente y pasar el identificador de tipo requerido.
El tipo de objeto generado se puede utilizar para solicitar permiso para acceder a datos, guardar datos nuevos o leer datos desde el almacenamiento de HealthKit.
La mayoría de los datos de salud y fitness se guardan en HealthKit Store mediante subclases de HKSample. Todas las subclases de muestra registran información en momentos específicos. Si las propiedades startDate y endDate de la muestra son las mismas, la muestra representa un momento determinado. Si endDate sigue a startDate, la muestra representa un intervalo de tiempo.
HealthKit utiliza diferentes subclases de HKSample para almacenar diferentes tipos de datos: