Introduzione a HealthKit parte 1

Il framework HealthKit è stato introdotto l'anno scorso al WWDC 2014 come un unico luogo in cui le app possono archiviare, condividere e leggere i dati relativi alla salute. La nuova app Salute, che è la vista dell'utente in quei dati, era una delle caratteristiche di punta di iOS 8.

Uno dei principali vantaggi di HealthKit è che le app per il fitness e la salute possono condividere facilmente i dati tra loro. Durante lo scorso anno, molti sviluppatori hanno adottato HealthKit nelle loro app e gli utenti esperti di tecnologia si sono aspettati che qualsiasi app per il fitness si integrasse con HealthKit.

Ci sono molti vantaggi, trucchi e buone pratiche quando si lavora con questo nuovo ed entusiasmante framework. Recentemente, ho avuto un'esperienza di prima mano lavorando con il framework HealthKit quando aggiungo il supporto per HealthKit a una delle mie app, Routie. Se stai pensando di utilizzare HealthKit nella tua app, questo tutorial è per te.

Perché dovrei preoccuparmi di HealthKit?

Ho già menzionato alcuni dei benefici di HealthKit, ma se non lo hai ancora venduto, lasciami solo dire che non è davvero così difficile integrare HealthKit. Andrei anche oltre e direi che è più facile della maggior parte degli altri nuovi framework introdotti da Apple. Ovviamente, ciò dipende in gran parte da ciò che si vuole ottenere con esso. Ma in generale, direi che il rapporto tra lo sforzo necessario per integrare HealthKit ei vantaggi che offre ai tuoi utenti è molto favorevole.

Oltre alla semplice integrazione con le app esistenti, offre anche la possibilità di creare una categoria di app completamente nuova. Ad esempio, puoi estrarre vari dati da HealthKit, ad esempio gli allenamenti o la pressione sanguigna dell'utente, e visualizzarli in un modo interessante, lasciando il duro lavoro di raccogliere quei dati in altre app.

Che cosa imparerai??

Il mio obiettivo con questo tutorial è di insegnarti le basi costruendo un'app di esempio. Inoltre, ti darò una serie di consigli e trucchi utili su come potresti o dovresti integrare HealthKit nelle tue app. Dopo aver letto questo articolo, dovresti avere una conoscenza di base di HealthKit, pronto per usarlo nelle tue app.

Cosa dovresti sapere

Il seguente elenco include una serie di informazioni di base su HealthKit di cui è necessario essere a conoscenza:

  • Il framework HealthKit è disponibile da iOS 8. Si noti che è disponibile solo su iPhone, non su iPad.
  • Apple è seriamente preoccupata della privacy ed è per questo che devi richiedere esplicitamente l'accesso a leggere e / o scrivere a HealthKit per ogni tipo di dati a cui devi accedere. L'utente ha la possibilità di consentire l'accesso per alcuni tipi e negarlo per gli altri.
  • Il framework HealthKit fa un uso pesante della sottoclasse.
  • Esistono due tipi di dati principali, caratteristiche campioni. Le caratteristiche, come la data di nascita o il gruppo sanguigno dell'utente, di solito non cambiano. Il campione rappresenta i dati in un determinato momento.
  • Campioni di quantità sono i tipi di dati più comuni. Includono l'altezza e il peso dell'utente, i passi compiuti, la temperatura dell'utente, la frequenza del polso, ecc.
  • allenamenti, che appartengono alla categoria dei campioni, sono destinati specificamente a rappresentare corse, passeggiate, passeggiate, ecc.

Per ulteriori informazioni sul framework HealthKit, visitare il riferimento del framework HealthKit di Apple.

Prima di iniziare

So che probabilmente sei ansioso di iniziare con il progetto di esempio, ma ci sono alcune cose importanti di cui dovresti essere a conoscenza prima di immergerti.

  • Il negozio HealthKit viene crittografato quando il telefono dell'utente è bloccato. Ciò significa che non sarai in grado di leggere da esso quando la tua app è in background. La scrittura su HealthKit, tuttavia, funziona anche quando il telefono è bloccato.
  • Devi spiegare nella descrizione dell'App Store e nella tua app in che modo la tua app utilizzerà i dati ottenuti da HealthKit. Non farlo potrebbe comportare il rifiuto della tua app.
  • C'è una nuova sezione nelle linee guida per la revisione dell'App Store che copre HealthKit. Dovresti assolutamente leggerlo prima di decidere se aggiungere o meno il supporto per HealthKit.
  • Una volta che la tua app si integra con HealthKit, devi fornire una politica sulla privacy per questo. Apple consiglia anche alcuni documenti che specificano quali dovrebbero essere le politiche sulla privacy relative alla salute. È importante che l'informativa sulla privacy comunichi all'utente come la tua app tratta i propri dati.

Ora che lo abbiamo tolto, iniziamo con il tutorial.

Il progetto

Costruiremo una semplice app che si integra con HealthKit e spiega alcuni dei concetti di base del framework. In particolare, noi:

  • crea un nuovo progetto da zero e abilita HealthKit
  • chiedere il permesso dell'utente per accedere ai propri dati relativi alla salute
  • leggi la data di nascita dell'utente
  • scrivere un campione di peso in HealthKit
  • scrivi un allenamento a HealthKit

1. Impostazione del progetto

Avvia Xcode e seleziona File > Nuovo > Progetto… Dal iOS> Applicazione sezione, selezionare il Applicazione a schede modello e clicca Il prossimo.

accedere HealthBasics come del progetto nome del prodotto e fare clic Il prossimo. Seleziona dove vuoi salvare il progetto e clicca Creare.

2. Abilitazione di HealthKit

Nel Project Navigator a sinistra, fare clic sul progetto, selezionare il HealthBasics bersaglio, e aprire il funzionalità scheda in alto. Scorri verso il basso fino a HealthKit sezione e consentire a HealthKit di attivare lo switch a destra. Dietro le quinte, Xcode farà il necessario per abilitare HealthKit.


3. Creazione dell'interfaccia utente

Per questo progetto, non useremo le classi di dimensioni. Poiché le classi di dimensioni sono abilitate per impostazione predefinita, è necessario disabilitarle manualmente in Xcode. Nel Project Navigator a sinistra, seleziona Main.storyboard. Apri il File Inspector a destra e deseleziona la casella di controllo Usa classi di dimensioni.

Xcode ti mostrerà una finestra di avviso. Eliminalo cliccando Disabilita classi di dimensioni, ma fare per mantenere i dati della classe di dimensione per i phone come mostrato di seguito.


Rimuovere le due etichette nel First View Controller. Quindi, trascina un'etichetta e un interruttore da Libreria di oggetti a destra sul controller First View. Cambia il testo dell'etichetta in Integrazione sanitaria e impostare lo stato del passaggio su via.

Aggiungi altre due etichette e un pulsante a First View Controller. Cambia il testo della prima etichetta in Età dell'utente:, cambia il testo della seconda etichetta in ??, e allinearli orizzontalmente come mostrato nell'immagine sottostante. Infine, cambia il titolo del pulsante in Leggere e posizionarlo a destra della seconda etichetta. La prima scena dovrebbe ora assomigliare a questa:

Non abbiamo ancora finito. Aggiungi un'altra etichetta, un campo di testo e un pulsante al primo controller di visualizzazione, allineandoli orizzontalmente come mostrato di seguito. Cambia il testo dell'etichetta in Peso dell'utente: e cambia il titolo del pulsante in Scrivi.

Seleziona il campo di testo che hai appena aggiunto e, nel Ispettore degli attributi, cambiala Tipo di tastiera a Numeri e punteggiatura. Questo è tutto. La prima scena dovrebbe ora assomigliare a questa:

4. Creazione di HealthKit Manager

Stiamo andando a mantenere il codice relativo a HealthKit in una classe separata, il GSHealthKitManager classe. Creiamo quella classe ora.

Nel Project Navigator, fare clic con il tasto destro del mouse su HealthBasics raggruppa e seleziona Nuovo file… . Assicurarsi Cocoa Touch Class è selezionato dall'elenco di modelli e fare clic Il prossimo. Dai un nome alla classe GSHealthKitManager e fare clic Il prossimo.

Apri il file di intestazione del file GSHealthKitManager classe e sostituire il contenuto del file con il seguente codice. Più tardi, chiameremo questi metodi dal FirstViewController classe.

#importare  @interface GSHealthKitManager: NSObject + (GSHealthKitManager *) sharedManager; - (void) requestAuthorization; - (NSDate *) readBirthDate; - (void) writeWeightSample: (CGFloat) peso; @fine

Successivamente, ope il file di implementazione di GSHealthKitManager classe e sostituire il suo contenuto con il seguente:

#import "GSHealthKitManager.h" #import  @interface GSHealthKitManager () @property (nonatomic, retain) HKHealthStore * healthStore; @end @implementation GSHealthKitManager + (GSHealthKitManager *) sharedManager static dispatch_once_t pred = 0; statico GSHealthKitManager * instance = nil; dispatch_once (& pred, ^ instance = [[GSHealthKitManager alloc] init]; instance.healthStore = [[HKHealthStore alloc] init];); restituire istanza;  - (void) requestAuthorization if ([HKHealthStore isHealthDataAvailable] == NO) // Se il nostro dispositivo non supporta HealthKit -> return. ritorno;  NSArray * readTypes = @ [[HKObjectType characteristicTypeForIdentifier: HKCharacteristicTypeIdentifierDateOfBirth]]; NSArray * writeTypes = @ [[HKObjectType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]]; [self.healthStore requestAuthorizationToShareTypes: [NSSet setWithArray: readTypes] readTypes: [NSSet setWithArray: writeTypes] completamento: nil];  - Errore (NSDate *) readBirthDate NSError *; NSDate * dateOfBirth = [self.healthStore dateOfBirthWithError: & error]; // Metodo di convenienza di HKHealthStore per ottenere direttamente la data di nascita. if (! dateOfBirth) NSLog (@ "Si è verificato un errore durante il recupero delle informazioni sull'età dell'utente o nessuna è stata ancora archiviata. Nella tua app, prova a gestirlo con garbo.");  return dateOfBirth;  - (void) writeWeightSample: (CGFloat) weight // Ogni quantità consiste in un valore e un'unità. HKUnit * kilogramUnit = [HKUnit gramUnitWithMetricPrefix: HKMetricPrefixKilo]; HKQuantity * weightQuantity = [HKQuantity quantityWithUnit: kilogramUnit doubleValue: weight]; HKQuantityType * weightType = [HKQuantityType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass]; NSDate * now = [Data NSDate]; // Per ogni campione, abbiamo bisogno di un tipo di campione, quantità e una data. HKQuantitySample * weightSample = [HKQuantitySample quantitySampleWithType: weightType quantity: weightQuantity startDate: now endDate: now]; [self.healthStore saveObject: weightSample withCompletion: ^ (errore BOOL, NSError * error) if (! successo) NSLog (@ "Errore durante il salvataggio del peso (% f) in Health Store:% @.", peso, errore) ; ];  @fine

Mentre la maggior parte del codice relativo a HealthKit è abbastanza semplice da comprendere, esaminiamo ciascun metodo per assicurarci di essere sulla stessa pagina.

  • sharedManager è un metodo di classe che crea l'oggetto singleton la prima volta che viene chiamato e restituisce quell'istanza ogni volta che viene richiamato il metodo. Il dispatch_once la funzione è una funzione GCD (Grand Central Dispatch) che garantisce che il blocco passato viene chiamato una sola volta, anche se il sharedManager il metodo verrebbe richiamato da più thread contemporaneamente.
  • requestAuthorization è un metodo che richiede all'archivio di HealthKit le autorizzazioni per leggere e / o scrivere i dati specifici di cui abbiamo bisogno. È necessario chiamare questo metodo prima di utilizzare una delle API di scrittura / lettura di HKHealthStore classe. Nel caso in cui l'utente neghi alcune (o tutte) autorizzazioni, HealthKit non ti informerà di questo. Il fatto che l'utente non voglia condividere alcuni tipi di dati è un'informazione in sé. Questo è quanto Apple tiene alla privacy.
  • Il readBirthDate metodo restituisce la data di nascita dell'utente. Torna zero se c'è stato un errore o se l'utente non ha inserito una data di nascita.
  • writeWeightSample: salva una misurazione del peso in HealthKit. Ho commentato il codice quindi dovresti avere un'idea generale di cosa sta succedendo nel metodo. Una volta che abbiamo il HKQuantitySample oggetto, lo salviamo nel HKHealthStore esempio, usando il suo saveObject: withCompletion: metodo. Questo metodo viene utilizzato per ogni tipo di dati sulla salute e lo utilizzeremo anche nella seconda parte di questo tutorial quando si salvano gli allenamenti.

In questo passaggio, hai incontrato un certo numero di classi HealthKit. Puoi leggere ulteriori informazioni su ogni classe nel riferimento del framework HealthKit, ma ti fornirò un breve riepilogo di ogni classe.

  • HKHealthStore Questa è la tua finestra per i dati di HealthKit. Apple consiglia di utilizzare solo un'istanza di questa classe nella tua app e che si presta molto bene al modello singleton. Lo si utilizza per chiedere all'utente autorizzazioni, salvare campioni e / o allenamenti su HealthKit e interrogare i dati memorizzati. Questi sono solo alcuni dei compiti del HKHealthStore classe.
  • HKUnit Le istanze di questa classe possono rappresentare unità di base, come metri, secondi e grammi o unità complesse create combinando unità di base, come km / ho o g / m³. Le unità complesse possono essere convenientemente create da stringhe.
  • HKQuantity Le istanze di questa classe memorizzano un valore (rappresentato da doppio) per una data unità (rappresentato da HKUnit). Puoi usare il doubleValueForUnit: metodo per convertire il valore della quantità nell'unità che è passata. Un esempio di tale conversione sarebbe la creazione di una quantità di distanza con unità di metri e la richiesta del suo valore in piedi.
  • HKQuantityType HealthKit utilizza i tipi di quantità per creare campioni che memorizzano un valore numerico. Si consiglia di usare quantityTypeForIdentifier: quando si creano tipi di quantità. Alcuni esempi di tipi di quantità sono la distanza ciclistica, energia bruciata, passi e voli saliti.
  • HKQuantitySample Un'istanza di questa classe rappresenta un esempio che ha un tipo di quantità (rappresentato da HKQuantityType), una quantità (rappresentata da HKQuantity) e una data di inizio e fine. Nel caso in cui il campione non si estende su un periodo di tempo, la data di fine può essere uguale alla data di inizio.

Ora possiamo usare il GSHealthKitManager singleton da qualsiasi punto della nostra applicazione per lavorare con HealthKit.

Conclusione

In questo tutorial, hai imparato le basi del framework HealthKit. Ti ho presentato al framework e ho indicato alcuni dei caveat a cui prestare attenzione. Abbiamo anche costruito le basi dell'applicazione di esempio e implementato il GSHealthKitManager classe, che useremo per interagire con HealthKit.

Nella seconda parte di questa serie, continueremo a creare l'app di esempio e ad integrare ulteriormente HealthKit. Puoi trovare i file sorgente per questo tutorial su GitHub.