HealthKit v Xamarin. iOS

Health Kit poskytuje zabezpečené úložiště dat pro informace týkající se stavu uživatele. Aplikace Health Kit můžou s explicitním oprávněním uživatele číst a zapisovat do tohoto úložiště dat a dostávat oznámení, když se přidají relevantní data. Aplikace můžou data prezentovat, nebo uživatel může použít aplikaci společnosti Apple, která poskytuje řídicí panel všech svých dat.

Vzhledem k tomu, že data týkající se stavu jsou tak citlivá a kritická, zdravotní sada je silného typu, s jednotkami měření a explicitním přidružením typu informací, které se zaznamenávají (například úroveň krevní jednotky glukosy nebo srdcová sazba). Kromě toho musí aplikace Health Kit používat explicitní oprávnění, musí požádat o přístup k určitým typům informací a uživatel musí explicitně udělit přístup k těmto typům dat.

Tento článek zavádí:

  • Požadavky na zabezpečení v sadě Health Kit, včetně zřizování aplikací a vyžádání oprávnění uživatele pro přístup k databázi Health Kit;
  • Systém typů pro stav, který minimalizuje možnost špatného použití nebo neinterpretace dat;
  • Zapisuje se do sdíleného úložiště dat na úrovni systému.

Tento článek se nezabývá pokročilejšími tématy, jako je dotazování databáze, převod mezi jednotkami měření nebo přijímání oznámení o nových datech.

V tomto článku vytvoříme ukázkovou aplikaci pro zaznamenání kurzu uživatele:

Ukázková aplikace pro zaznamenání kurzu uživatelů

Požadavky

K dokončení kroků uvedených v tomto článku jsou potřeba následující:

  • Xcode 7 a iOS 8 (nebo vyšší) – na počítači vývojáře musí být nainstalované a nakonfigurované nejnovější rozhraní API pro Xcode a iOS.
  • Visual Studio pro Mac nebo Visual Studio – na počítači vývojáře by měla být nainstalovaná a nakonfigurovaná nejnovější verze Visual Studio pro Mac.
  • zařízení se systémem iOS 8 (nebo vyšší) – zařízení s iOS, na kterém běží nejnovější verze iOS 8 nebo vyšší pro testování.

Důležité

Sada Health Kit byla představena v systému iOS 8. V současné době není v simulátoru iOS dostupná sada Health Kit a ladění vyžaduje připojení k fyzickému zařízení s iOS.

Vytvoření a zřízení aplikace Health Kit

Předtím, než může aplikace Xamarin iOS 8 používat rozhraní API HealthKit, musí být správně nakonfigurované a zřízené. Tato část se zabývá kroky potřebnými ke správné instalaci aplikace Xamarin.

Aplikace pro Health Kit vyžadují:

  • Explicitní ID aplikace
  • Zřizovací profil přidružený k tomuto explicitnímu ID aplikace a s oprávněními sady Health Kit .
  • Entitlements.plistcom.apple.developer.healthkit Vlastnost s vlastností typu Boolean nastavenou na hodnotu Yes .
  • Info.plistJejíž UIRequiredDeviceCapabilities klíč obsahuje položku s String hodnotou healthkit .
  • Info.plistMusí mít také odpovídající položky pro vysvětlení ochrany osobních údajů: String vysvětlení klíče, NSHealthUpdateUsageDescription Pokud aplikace bude zapisovat data a String vysvětlení klíče, NSHealthShareUsageDescription Pokud aplikace bude číst data ze sady Health Kit.

Pokud chcete získat další informace o zřizování aplikace pro iOS, popisuje článek zřizování zařízení v sadě Xamarin Začínáme Series vztah mezi certifikáty pro vývojáře, ID aplikací, zřizovacími profily a nároky na aplikace.

Explicitní ID aplikace a zřizovací profil

Vytvoření explicitního ID aplikace a příslušného profilu zřizování se provádí v Dev Center iOSspolečnosti Apple.

Vaše aktuální ID aplikací jsou uvedená v části certifikáty, profily identifikátorů Dev Center. Často se v tomto seznamu zobrazí hodnoty ID , které označují, že název ID aplikace se dá použít s libovolným počtem přípon. Tato ID aplikace se zástupnými znaky nejde použít se sadou Health Kit.

Pokud chcete vytvořit explicitní ID aplikace, klikněte na tlačítko v pravém horním rohu, abyste se převzali na stránku Registrovat ID aplikace pro iOS :

Registrace aplikace na portálu pro vývojáře Apple

Jak je znázorněno na obrázku výše, po vytvoření popisu aplikace použijte část explicitní ID aplikace a vytvořte pro svoji aplikaci ID. V části App Services zaškrtněte v části Povolit služby možnostsada Health Kit .

Po dokončení klikněte na tlačítko pokračovat a zaregistrujte ID aplikace ve vašem účtu. Vrátíte se zpátky na stránku certifikáty, identifikátory a profily . Kliknutím na profily zřizování získáte seznam aktuálních zřizovacích profilů a kliknutím na tlačítko v pravém horním rohu přejděte na stránku Přidat zřizovací profil iOS . Vyberte možnost vývoje aplikace pro iOS a kliknutím na pokračovat se dostanete na stránku vybrat ID aplikace . Zde vyberte explicitní ID aplikace , které jste zadali dříve:

Vybrat explicitní ID aplikace

Klikněte na pokračovat a pracujte na zbývajících obrazovkách, kde budete určovat svoje certifikáty pro vývojáře, zařízenía název pro tento zřizovací profil:

Generuje se zřizovací profil.

Klikněte na vygenerovat a čeká na vytvoření profilu. Stáhněte si soubor a dvakrát na něj klikněte, aby se nainstaloval v Xcode. Můžete potvrdit jeho instalaci v části Xcode Předvolby >> Zobrazit podrobnosti... Měl by se zobrazit váš právě nainstalovaný zřizovací profil a na řádku > by měl mít ikonu pro sadu Health Kit a další speciální služby:

Zobrazení profilu v Xcode

Přidružení ID aplikace a zřizovacího profilu k vaší aplikaci Xamarin. iOS

jakmile vytvoříte a nainstalujete vhodný profil pro zřizování , který je popsaný v tomto tématu, obvykle je čas vytvořit řešení v Visual Studio pro Mac nebo Visual Studio. Přístup ke Health Kit je dostupný pro všechny projekty iOS v jazyce C# nebo F #.

Místo toho, abyste provedli postup vytvoření projektu Xamarin iOS 8 rukou, otevřete ukázkovou aplikaci připojenou k tomuto článku (která zahrnuje předem sestavený scénář a kód). chcete-li přidružit ukázkovou aplikaci k profilu zřizovánís povoleným stavem, klikněte v Oblast řešenípravým tlačítkem myši na Project a zobrazte dialogové okno možnosti . Přepněte na panel aplikace pro iOS a zadejte explicitní ID aplikace , které jste předtím vytvořili jako identifikátor sady prostředkůaplikace:

Zadejte explicitní ID aplikace.

Teď přepněte na panel podepisování sady prostředků iOS . Nedávno nainstalovaný zřizovací profils jeho přidružením k explicitnímu ID aplikacebude nyní k dispozici jako zřizovací profil:

Vyberte zřizovací profil.

pokud zřizovací profil není k dispozici, poklikejte na identifikátor sady prostředků na panelu aplikace pro ios , který je zadaný v Dev Center iOS a že je nainstalovaný zřizovací profil (Xcode předvolby zobrazit podrobnosti...).

když je vybraný zřizovací profil s povoleným stavovou sadou, kliknutím na OK zavřete dialogové okno možnosti Project.

Nároky. plist a info. plist Values

ukázková aplikace obsahuje Entitlements.plist soubor (který je nezbytný pro aplikace s podporou sady Health Kit) a není zahrnutý v každé šabloně Project. Pokud projekt neobsahuje oprávnění, klikněte pravým tlačítkem myši na projekt, vyberte možnost soubor nový soubor... > iOS > nároks. plist pro ruční přidání.

Nakonec Entitlements.plist musí mít následující dvojici klíč a hodnota:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.HealthKit</key>
    <true/>
</dict>
</plist>

Podobně platí, že Info.plist pro aplikaci musí být hodnota healthkit přidružená ke UIRequiredDeviceCapabilities klíči:

<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
    <string>healthkit</string>
</array>

Ukázková aplikace, která je součástí tohoto článku, zahrnuje předem nakonfigurovanou Entitlements.plist , která zahrnuje všechny požadované klíče.

Sada stavů programování

Úložiště dat Health Kit je soukromé úložiště dat specifické pro uživatele, které se sdílí mezi aplikacemi. Vzhledem k tomu, že informace o stavu jsou tak citlivé, musí uživatel provést pozitivní kroky, aby přístup k datům umožňoval. Tento přístup může být částečný (zápis, ale ne čtení, přístup k některým typům dat, ne jiné atd.) a může být kdykoli odvolat. Aplikace Health Kit by se měly zapsat do defensively s porozuměním, že mnoho uživatelů bude váhají o ukládání informací týkajících se stavu.

Data v sadě Health Kit jsou omezená na společnosti Apple určené typy. Tyto typy jsou striktně definovány: některé, například typ krevní jednotky, jsou omezeny na konkrétní hodnoty výčtu dodaných společností Apple, zatímco jiné spojují velikost s měrnou jednotkou (například gramy, kalorií a litry). Data, která sdílejí kompatibilní měrnou jednotku, jsou odlišena jejich HKObjectType ; například systém typů zachytí pokus o uložení HKQuantityTypeIdentifier.NumberOfTimesFallen hodnoty do pole, které očekává HKQuantityTypeIdentifier.FlightsClimbed i v případě, že používají HKUnit.Count měrnou jednotku.

Typy storable v úložišti dat Health Kit jsou všechny podtřídy HKObjectType . HKCharacteristicType objekty ukládají biologická sex, krevní typ a datum narození. Častěji než, jsou HKSampleType objekty, které představují data, která jsou vzorkovaná v určitou dobu nebo v časovém intervalu.

Graf objektů HKSampleType

HKSampleType je abstraktní a má čtyři konkrétní podtřídy. V současné době je k dispozici pouze jeden typ HKCategoryType dat, což je analýza režimu spánku. Velká většina dat v sadě Health Kit je typu HKQuantityType a ukládá data do HKQuantitySample objektů, které se vytvářejí pomocí známého vzoru návrhu výroby:

Velká většina dat v sadě Health Kit je typu HKQuantityType a ukládá data do objektů HKQuantitySample.

HKQuantityType typy rozsahu od HKQuantityTypeIdentifier.ActiveEnergyBurned do HKQuantityTypeIdentifier.StepCount .

Požaduje se oprávnění od uživatele.

Koncoví uživatelé musí provést pozitivní kroky, aby aplikaci umožnila čtení nebo zápis dat ze sady Health Kit. To se provádí prostřednictvím aplikace Health, která je součástí předinstalovaného zařízení s iOS 8. Při prvním spuštění aplikace Health Kit se uživateli zobrazí dialogové okno pro přístup do stavu kontrolované systémem:

Uživateli se zobrazí dialogové okno s přístupem k stavu ovládané systémem.

Později může uživatel změnit oprávnění pomocí dialogového okna zdroje aplikace stavu:

Uživatel může měnit oprávnění pomocí dialogového okna zdroje aplikací Health.

Vzhledem k tomu, že informace o stavu jsou extrémně citlivé, vývojáři aplikací by měli napsat své programy defensively. očekává se, že oprávnění budou zamítnutá a změněna, dokud bude aplikace spuštěná. Nejběžnějším idiom je požádat o oprávnění v UIApplicationDelegate.OnActivated metodě a pak upravit uživatelské rozhraní podle potřeby.

Návod k oprávněním

V projektu zřízeného v sadě Health SDK otevřete AppDelegate.cs soubor. Všimněte si příkazu pomocí HealthKit ; v horní části souboru.

Následující kód má vztah k oprávněním pro sadu Health Kit:

private HKHealthStore healthKitStore = new HKHealthStore ();

public override void OnActivated (UIApplication application)
{
        ValidateAuthorization ();
}

private void ValidateAuthorization ()
{
        var heartRateId = HKQuantityTypeIdentifierKey.HeartRate;
        var heartRateType = HKObjectType.GetQuantityType (heartRateId);
        var typesToWrite = new NSSet (new [] { heartRateType });
        var typesToRead = new NSSet ();
        healthKitStore.RequestAuthorizationToShare (
                typesToWrite, 
                typesToRead, 
                ReactToHealthCarePermissions);
}

void ReactToHealthCarePermissions (bool success, NSError error)
{
        var access = healthKitStore.GetAuthorizationStatus (HKObjectType.GetQuantityType (HKQuantityTypeIdentifierKey.HeartRate));
        if (access.HasFlag (HKAuthorizationStatus.SharingAuthorized)) {
                HeartRateModel.Instance.Enabled = true;
        } else {
                HeartRateModel.Instance.Enabled = false;
        }
}

Veškerý kód v těchto metodách je možné provést v rámci vložení do OnActivated , ale ukázková aplikace používá ke zrušení jejich záměru samostatné metody: ValidateAuthorization() má potřebné kroky pro vyžadování přístupu ke konkrétním typům, které jsou zapsány (a čtení, pokud je aplikace požadovaná), a ReactToHealthCarePermissions() je zpětné volání, které se aktivuje po interakci uživatele s dialogem oprávnění v Health.app.

Úkolem pro ValidateAuthorization() je sestavení sady HKObjectTypes , kterou aplikace zapisuje a požaduje autorizaci k aktualizaci těchto dat. V ukázkové aplikaci HKObjectType je klíč KHQuantityTypeIdentifierKey.HeartRate . Tento typ je přidán do sady typesToWrite , zatímco sada typesToRead je ponechána prázdná. Tyto sady a odkaz na ReactToHealthCarePermissions() zpětné volání jsou předány do HKHealthStore.RequestAuthorizationToShare() .

ReactToHealthCarePermissions()Zpětné volání bude voláno poté, co uživatel bude pracovat s dialogem oprávnění a předává se dvě části informací: bool hodnota, která bude true v případě, že uživatel spolupracuje s dialogem oprávnění a NSError který (Pokud není null) indikuje nějaký druh chyby spojené s prezentováním dialogového okna oprávnění.

Důležité

Aby bylo jasné, že argumenty mají tyto funkce: parametry Success a Error neoznačují, jestli má uživatel udělené oprávnění pro přístup k datům Health Kit. Pouze označují, že uživatel měl možnost povolit přístup k datům.

Pokud chcete potvrdit, jestli má aplikace přístup k datům, HKHealthStore.GetAuthorizationStatus() použije se HKQuantityTypeIdentifierKey.HeartRate . Na základě vráceného stavu aplikace povolí nebo zakáže možnost zadávat data. Není k dispozici žádné standardní uživatelské prostředí pro práci s odepřením přístupu a existuje mnoho možných možností. V ukázkové aplikaci je stav nastaven na HeartRateModel objekt typu Singleton, který zase vyvolá relevantní události.

Model, zobrazení a kontroler

Chcete-li zkontrolovat HeartRateModel objekt typu Singleton, otevřete HeartRateModel.cs soubor:

using System;
using HealthKit;
using Foundation;

namespace HKWork
{
        public class GenericEventArgs<T> : EventArgs
        {
                public T Value { get; protected set; }
                public DateTime Time { get; protected set; }

                public GenericEventArgs (T value)
                {
                        this.Value = value;
                        Time = DateTime.Now;
                }
        }

        public delegate void GenericEventHandler<T> (object sender,GenericEventArgs<T> args);

        public sealed class HeartRateModel : NSObject
        {
                private static volatile HeartRateModel singleton;
                private static object syncRoot = new Object ();

                private HeartRateModel ()
                {
                }

                public static HeartRateModel Instance {
                        get {
                                //Double-check lazy initialization
                                if (singleton == null) {
                                        lock (syncRoot) {
                                                if (singleton == null) {
                                                        singleton = new HeartRateModel ();
                                                }
                                        }
                                }

                                return singleton;
                        }
                }

                private bool enabled = false;

                public event GenericEventHandler<bool> EnabledChanged;
                public event GenericEventHandler<String> ErrorMessageChanged;
                public event GenericEventHandler<Double> HeartRateStored;

                public bool Enabled { 
                        get { return enabled; }
                        set {
                                if (enabled != value) {
                                        enabled = value;
                                        InvokeOnMainThread(() => EnabledChanged (this, new GenericEventArgs<bool>(value)));
                                }
                        }
                }

                public void PermissionsError(string msg)
                {
                        Enabled = false;
                        InvokeOnMainThread(() => ErrorMessageChanged (this, new GenericEventArgs<string>(msg)));
                }

                //Converts its argument into a strongly-typed quantity representing the value in beats-per-minute
                public HKQuantity HeartRateInBeatsPerMinute(ushort beatsPerMinute)
                {
                        var heartRateUnitType = HKUnit.Count.UnitDividedBy (HKUnit.Minute);
                        var quantity = HKQuantity.FromQuantity (heartRateUnitType, beatsPerMinute);

                        return quantity;
                }
                        
                public void StoreHeartRate(HKQuantity quantity)
                {
                        var bpm = HKUnit.Count.UnitDividedBy (HKUnit.Minute);
                        //Confirm that the value passed in is of a valid type (can be converted to beats-per-minute)
                        if (! quantity.IsCompatible(bpm))
                        {
                                InvokeOnMainThread(() => ErrorMessageChanged(this, new GenericEventArgs<string> ("Units must be compatible with BPM")));
                        }

                        var heartRateId = HKQuantityTypeIdentifierKey.HeartRate;
                        var heartRateQuantityType = HKQuantityType.GetQuantityType (heartRateId);
                        var heartRateSample = HKQuantitySample.FromType (heartRateQuantityType, quantity, new NSDate (), new NSDate (), new HKMetadata());

                        using (var healthKitStore = new HKHealthStore ()) {
                                healthKitStore.SaveObject (heartRateSample, (success, error) => {
                                        InvokeOnMainThread (() => {
                                                if (success) {
                                                        HeartRateStored(this, new GenericEventArgs<Double>(quantity.GetDoubleValue(bpm)));
                                                } else {
                                                        ErrorMessageChanged(this, new GenericEventArgs<string>("Save failed"));
                                                }
                                                if (error != null) {
                                                        //If there's some kind of error, disable 
                                                        Enabled = false;
                                                        ErrorMessageChanged (this, new GenericEventArgs<string>(error.ToString()));
                                                }
                                        });
                                });
                        }
                }
        }
}

První část je často používaný kód pro vytváření obecných událostí a obslužných rutin. Počáteční část HeartRateModel třídy je také často používaný pro vytvoření objektu singleton bezpečného pro přístup z více vláken.

Pak HeartRateModel zpřístupňuje 3 události:

  • EnabledChanged – Označuje, že úložiště pro srdcovou sazbu je povolené nebo zakázané (úložiště je zpočátku zakázané).
  • ErrorMessageChanged – Pro tuto ukázkovou aplikaci máme velmi jednoduchý model zpracování chyb: řetězec s poslední chybou.
  • HeartRateStored – Vyvoláno, když je v databázi Health Kit uložený srdcový kmitočet.

Všimněte si, že když jsou tyto události vyvolány, je provedeno prostřednictvím NSObject.InvokeOnMainThread() , což umožňuje předplatitelům aktualizovat uživatelské rozhraní. Alternativně lze události zdokumentovat, jak jsou vyvolány na vlákna na pozadí a odpovědnost za zajištění kompatibility s jejich obslužnými rutinami. Informace o vláknech jsou důležité v aplikacích ve službě Health Kit, protože mnohé z funkcí, jako je žádost o oprávnění, jsou asynchronní a spouštějí jejich zpětná volání v jiných než hlavních vláknech.

Kód specifický pro sadu stavu Kit v HeartRateModel je v těchto dvou funkcích HeartRateInBeatsPerMinute() a StoreHeartRate() .

HeartRateInBeatsPerMinute() Převede svůj argument na typovou sadu se silnými typy HKQuantity . Typ množství je, který je určen HKQuantityTypeIdentifierKey.HeartRate a jednotky množství jsou HKUnit.Count děleny HKUnit.Minute (jinými slovy, jednotka je HKQuantityTypeIdentifierKey.HeartRate).

StoreHeartRate()Funkce přebírá HKQuantity (v ukázkové aplikaci, kterou vytvořil HeartRateInBeatsPerMinute() ). Chcete-li ověřit jeho data, používá HKQuantity.IsCompatible() metodu, která vrátí, true Pokud je možné jednotky objektu převést na jednotky v argumentu. Pokud bylo množství vytvořeno s HeartRateInBeatsPerMinute() tímto výsledkem, bude zjevně vráceno true , ale také vrátí, true zda bylo množství vytvořeno jako například HeartRateInBeatsPerMinute(). Častěji se HKQuantity.IsCompatible() dá použít k ověření množství, vzdálenosti a energie, které může uživatel nebo zařízení zadávat nebo zobrazovat v jednom systému měření (například jednotky britských), ale které můžou být uložené v jiném systému (například metrické jednotky).

Po ověření kompatibility množství se HKQuantitySample.FromType() Metoda Factory používá k vytvoření objektu silného typu heartRateSample . HKSample objekty mají počáteční a koncové datum; pro okamžité čtení by měly být tyto hodnoty stejné, jako v příkladu. Ukázka také v argumentu nenastavuje žádná data klíč-hodnota HKMetadata , ale jedna by mohla použít kód, jako je například následující kód k určení umístění senzoru:

var hkm = new HKMetadata();
hkm.HeartRateSensorLocation = HKHeartRateSensorLocation.Chest;

Po heartRateSample Vytvoření kód vytvoří nové připojení k databázi pomocí bloku using. V rámci tohoto bloku se HKHealthStore.SaveObject() Metoda pokusí o asynchronní zápis do databáze. Výsledné volání výrazu lambda vyvolá relevantní události, buď HeartRateStored nebo ErrorMessageChanged .

Teď, když je model naprogramován, je čas zjistit, jak kontroler odráží stav modelu. Otevřete soubor HKWorkViewController.cs. Konstruktor jednoduše HeartRateModel předává typ singleton na metody zpracování událostí (znovu, to může být provedeno vložené pomocí výrazů lambda, ale samostatné metody vedou k záměru něco jasnějšího):

public HKWorkViewController (IntPtr handle) : base (handle)
{
     HeartRateModel.Instance.EnabledChanged += OnEnabledChanged;
     HeartRateModel.Instance.ErrorMessageChanged += OnErrorMessageChanged;
     HeartRateModel.Instance.HeartRateStored += OnHeartBeatStored;
}

Tady jsou příslušné obslužné rutiny:

void OnEnabledChanged (object sender, GenericEventArgs<bool> args)
{
        StoreData.Enabled = args.Value;
        PermissionsLabel.Text = args.Value ? "Ready to record" : "Not authorized to store data.";
        PermissionsLabel.SizeToFit ();
}

void OnErrorMessageChanged (object sender, GenericEventArgs<string> args)
{
        PermissionsLabel.Text = args.Value;
}

void OnHeartBeatStored (object sender, GenericEventArgs<double> args)
{
        PermissionsLabel.Text = String.Format ("Stored {0} BPM", args.Value);
}

V aplikaci s jediným kontrolérem by bylo možné se vyhnout vytvoření samostatného objektu modelu a použití událostí pro tok řízení, ale použití objektů modelu je vhodnější pro reálné aplikace.

Spuštění ukázkové aplikace

Simulátor iOS nepodporuje sadu Health Kit. Ladění se musí provádět na fyzickém zařízení se systémem iOS 8.

Připojte správně zřízené vývojové zařízení iOS 8 k vašemu systému. vyberte jej jako cíl nasazení v Visual Studio pro Mac a v nabídce zvolte možnost spustit ladění.

Důležité

V tuto chvíli se zobrazí chyby týkající se zřizování. Pokud chcete řešit chyby, přečtěte si část vytvoření a zřízení aplikace Health Kit výše. Komponenty jsou:

  • iOS Dev Center – explicitní ID aplikace Zřizovací profil povolený pro sadu Health Kit.
  • možnosti Project – identifikátor sady (explicitní ID aplikace) Profil zřizování.
  • Nároky na zdrojový kód . plist info. plist

Za předpokladu, že jsou předpisy správně nastavené, vaše aplikace se spustí. Když dosáhne své OnActivated metody, bude vyžadovat autorizaci sady Health Kit. Při prvním výskytu v operačním systému se uživateli zobrazí následující dialog:

Uživateli se zobrazí tento dialog.

Umožněte aplikaci aktualizovat data srdcových sazeb a vaše aplikace se znovu zobrazí. ReactToHealthCarePermissionsZpětné volání bude aktivováno asynchronně. Tím se HeartRateModel’sEnabled změní vlastnost, která vyvolá EnabledChanged událost, což způsobí, že se HKPermissionsViewController.OnEnabledChanged() obslužná rutina události spustí, což umožní StoreData tlačítko. Následující diagram znázorňuje sekvenci:

Tento diagram znázorňuje posloupnost událostí.

Stiskněte tlačítko Record (záznam ). Tato akce způsobí, že se StoreData_TouchUpInside() obslužná rutina spustí, která se pokusí analyzovat hodnotu heartRate textového pole, převeďte ji HKQuantity přes dříve popsanou HeartRateModel.HeartRateInBeatsPerMinute() funkci a předejte ji do HeartRateModel.StoreHeartRate() . Jak bylo popsáno dříve, se pokusí uložit data a vyvolá HeartRateStoredErrorMessageChanged událost nebo.

Dvakrát klikněte na tlačítko Domů na zařízení a otevřete aplikaci Health. Klikněte na kartu zdroje a zobrazí se uvedená ukázková aplikace. Vyberte ho a zakažte oprávnění k aktualizaci dat o srdcových sazbách. Dvakrát klikněte na tlačítko Domů a přepněte zpátky do své aplikace. Znovu se ReactToHealthCarePermissions() zavolá, ale tentokrát, protože přístup je odepřený, tlačítko ReactToHealthCarePermissions() se deaktivuje (Všimněte si, že se jedná o asynchronní a změna v uživatelském rozhraní může být pro koncového uživatele viditelná).

Pokročilá témata

Čtení dat z databáze Health Kit je velmi podobné zápisu dat: jedna určuje typy dat, ke kterým se přistupuje, žádá o autorizaci a pokud je tato autorizace udělená, data jsou k dispozici s automatickým převodem na kompatibilní měrné jednotky.

Existuje několik propracovanějších funkcí dotazů, které umožňují dotazování a dotazy založené na predikátech, které provádějí aktualizace, když jsou relevantní data aktualizována.

Vývojáři aplikací Health Kit by si měli projít oddíl Health Kit v pokynech pro revizi aplikaceod společnosti Apple.

Jakmile jsou modely zabezpečení a typů srozumitelné, ukládání a čtení dat v databázi Shared Health Kit je poměrně jasné. Mnohé z funkcí v sadě Health Kit fungují asynchronně a vývojáři aplikací musí správně zapisovat své programy.

Od psaní tohoto článku momentálně není v Androidu ani v Windows Phone žádný ekvivalent ke službě Health Kit.

Souhrn

V tomto článku jsme se seznámili s tím, jak sada Health Kit umožňuje aplikacím ukládat, načítat a sdílet informace související se stavem a zároveň poskytuje standardní aplikaci pro stav, která uživatelům umožňuje přístup k těmto datům a jejich kontrolu.

Zjistili jsme také, jak ochrany osobních údajů, zabezpečení a integrity dat přepsaly obavy týkající se informací o stavu a aplikací, které používají sadu Health Kit, se musí vypořádat se zvýšením složitosti v aspektech správy aplikací (zřizování), kódování (systému typů systému) a činnostmi uživatele (uživatelský ovládací prvek oprávnění prostřednictvím systémových dialogových sad a aplikací Health).

Nakonec se podíváme na jednoduchou implementaci Health Kit pomocí zahrnuté ukázkové aplikace, která zapisuje data prezenčního signálu do úložiště Health Kit a má asynchronní návrh.