HealthKit di Xamarin.iOS
Health Kit menyediakan datastore yang aman untuk informasi terkait kesehatan pengguna. Aplikasi Kit Kesehatan dapat, dengan izin eksplisit pengguna, membaca dan menulis ke datastore ini dan menerima pemberitahuan saat data terkait ditambahkan. App dapat menyajikan data, atau pengguna dapat menggunakan app Kesehatan yang disediakan Apple untuk melihat dasbor semua data mereka.
Karena data terkait kesehatan sangat sensitif dan penting, Health Kit sangat diketik, dengan unit pengukuran dan hubungan eksplisit dengan jenis informasi yang dicatat (misalnya, tingkat glukosa darah atau denyut jantung). Selain itu, aplikasi Health Kit harus menggunakan hak eksplisit, harus meminta akses ke jenis informasi tertentu, dan pengguna harus secara eksplisit memberikan akses aplikasi ke jenis data tersebut.
Artikel ini akan memperkenalkan:
- Persyaratan keamanan Health Kit, termasuk provisi aplikasi dan meminta izin pengguna untuk mengakses database Health Kit;
- Sistem jenis Health Kit, yang meminimalkan kemungkinan salah menerapkan atau salah menafsirkan data;
- Menulis ke datastore Health Kit bersama di seluruh sistem.
Artikel ini tidak akan membahas topik yang lebih canggih, seperti mengkueri database, mengonversi antara satuan ukuran, atau menerima pemberitahuan data baru.
Dalam artikel ini, kita akan membuat aplikasi sampel untuk merekam denyut jantung pengguna:
Persyaratan
Berikut ini diperlukan untuk menyelesaikan langkah-langkah yang disajikan dalam artikel ini:
- Xcode 7 dan iOS 8 (atau lebih besar) – API Xcode dan iOS terbaru Apple perlu diinstal dan dikonfigurasi di komputer pengembang.
- Visual Studio untuk Mac atau Visual Studio – Versi terbaru Visual Studio untuk Mac harus diinstal dan dikonfigurasi di komputer pengembang.
- Perangkat iOS 8 (atau lebih besar) – Perangkat iOS yang menjalankan versi terbaru iOS 8 atau lebih tinggi untuk pengujian.
Penting
Health Kit diperkenalkan di iOS 8. Saat ini, Health Kit tidak tersedia di simulator iOS, dan penelusuran kesalahan memerlukan koneksi ke perangkat iOS fisik.
Membuat dan Memprovisikan Aplikasi Kit Kesehatan
Sebelum aplikasi Xamarin iOS 8 dapat menggunakan Api HealthKit, aplikasi harus dikonfigurasi dan disediakan dengan benar. Bagian ini akan membahas langkah-langkah yang diperlukan untuk menyiapkan Aplikasi Xamarin Anda dengan benar.
Aplikasi Kit Kesehatan memerlukan:
- ID Aplikasi eksplisit.
- Profil Provisi yang terkait dengan ID Aplikasi eksplisit tersebut dan dengan izin Health Kit.
- Dengan
Entitlements.plist
com.apple.developer.healthkit
properti jenisBoolean
diatur keYes
. - Kunci
Info.plist
yangUIRequiredDeviceCapabilities
berisi entri denganString
nilaihealthkit
. - juga
Info.plist
harus memiliki entri penjelasan privasi yang sesuai:String
penjelasan untuk kunciNSHealthUpdateUsageDescription
jika aplikasi akan menulis data danString
penjelasan untuk kunciNSHealthShareUsageDescription
jika aplikasi akan membaca data Health Kit.
Untuk mengetahui selengkapnya tentang provisi aplikasi iOS, artikel Provisi Perangkat di seri Memulai Xamarin menjelaskan hubungan antara Sertifikat Pengembang, ID Aplikasi, Profil Provisi, dan Pemberian Izin Aplikasi.
ID Aplikasi Eksplisit dan Profil Provisi
Pembuatan ID Aplikasi eksplisit dan Profil Provisi yang sesuai dilakukan dalam Pusat Dev iOS Apple.
ID Aplikasi Anda saat ini tercantum dalam bagian Sertifikat, Pengidentifikasi , & Profil di Pusat Dev. Seringkali, daftar ini akan menampilkan nilai *
ID , yang menunjukkan bahwa Nama ID - Aplikasi dapat digunakan dengan sejumlah akhiran. ID Aplikasi Wildcard tersebut tidak dapat digunakan dengan Kit Kesehatan.
Untuk membuat ID Aplikasi eksplisit, klik tombol + di kanan atas untuk membawa Anda ke halaman Daftarkan ID Aplikasi iOS:
Seperti yang ditunjukkan pada gambar di atas, setelah membuat deskripsi aplikasi, gunakan bagian ID Aplikasi Eksplisit untuk membuat ID untuk aplikasi Anda. Di bagian App Services , periksa Kit Kesehatan di bagian Aktifkan Layanan .
Setelah selesai, tekan tombol Lanjutkan untuk mendaftarkan ID Aplikasi di akun Anda. Anda akan dibawa kembali ke halaman Sertifikat, Pengidentifikasi, dan Profil . Klik Profil Provisi untuk membawa Anda ke daftar profil provisi Anda saat ini, dan klik + tombol di sudut kanan atas untuk membawa Anda ke halaman Tambahkan Profil Provisi iOS. Pilih opsi Pengembangan Aplikasi iOS dan klik Lanjutkan untuk masuk ke halaman Pilih ID Aplikasi. Di sini, pilih ID Aplikasi eksplisit yang sebelumnya Anda tentukan:
Klik Lanjutkan dan kerjakan layar yang tersisa, tempat Anda akan menentukan Sertifikat Pengembang, Perangkat, dan Nama untuk Profil Provisi ini:
Klik Buat dan tunggu pembuatan profil Anda. Unduh file dan klik dua kali untuk menginstal di Xcode. Anda dapat mengonfirmasi penginstalannya di bawah Detail Tampilan Akun > Preferensi > Xcode>... Anda akan melihat profil provisi yang baru saja diinstal, dan profil tersebut harus memiliki ikon untuk Kit Kesehatan dan layanan khusus lainnya di baris Pemberian Izinnya:
Mengaitkan ID Aplikasi dan Profil Provisi Dengan Aplikasi Xamarin.iOS Anda
Setelah Anda membuat dan menginstal Profil Provisi yang sesuai seperti yang dijelaskan, biasanya saatnya untuk membuat solusi di Visual Studio untuk Mac atau Visual Studio. Akses Health Kit tersedia untuk proyek iOS C# atau F# apa pun.
Daripada menelusuri proses pembuatan proyek Xamarin iOS 8 secara bersamaan, buka aplikasi sampel yang dilampirkan ke artikel ini (yang mencakup Storyboard dan kode bawaan). Untuk mengaitkan aplikasi sampel dengan Profil Provisi yang diaktifkan Kit Kesehatan Anda, di Pad Solusi, klik kanan pada Proyek Anda dan munculkan dialog Opsinya. Beralih ke panel Aplikasi iOS dan masukkan ID Aplikasi eksplisit yang Anda buat sebelumnya sebagai Pengidentifikasi Bundel aplikasi:
Sekarang beralih ke panel Penandatanganan Bundel iOS. Profil Provisi yang baru-baru ini diinstal, dengan asosiasinya ke ID Aplikasi eksplisit, sekarang akan tersedia sebagai Profil Provisi:
Jika Profil Provisi tidak tersedia, periksa kembali Pengidentifikasi Bundel di panel Aplikasi iOS versus yang ditentukan di iOS Dev Center dan bahwa Profil Provisi diinstal (Detail Tampilan Akun > Preferensi > Xcode>...).
Saat Profil Provisi yang diaktifkan Kit Kesehatan dipilih, klik OK untuk menutup dialog Opsi Proyek.
Nilai Entitlements.plist dan Info.plist
Aplikasi sampel menyertakan Entitlements.plist
file (yang diperlukan untuk aplikasi yang diaktifkan Health Kit), dan tidak disertakan dalam setiap Templat Proyek. Jika proyek Anda tidak menyertakan hak, klik kanan pada proyek Anda, pilih File > Baru... > iOS > Entitlements.plist untuk menambahkannya secara manual.
Pada akhirnya, Anda Entitlements.plist
harus memiliki pasangan kunci dan nilai berikut:
<?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>
Demikian pula, Info.plist
untuk aplikasi harus memiliki nilai healthkit
yang terkait dengan UIRequiredDeviceCapabilities
kunci:
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
<string>healthkit</string>
</array>
Aplikasi sampel yang disediakan dengan artikel ini mencakup prakonfigurasi Entitlements.plist
yang mencakup semua kunci yang diperlukan.
Kit Kesehatan Pemrograman
Datastore Health Kit adalah datastore pribadi khusus pengguna yang dibagikan di antara aplikasi. Karena informasi kesehatan sangat sensitif, pengguna harus mengambil langkah-langkah positif untuk mengizinkan akses data. Akses ini mungkin sebagian (tulis tetapi tidak dibaca, akses untuk beberapa jenis data tetapi tidak yang lain, dll.) dan dapat dicabut kapan saja. Aplikasi Health Kit harus ditulis secara defensif, dengan pemahaman bahwa banyak pengguna akan ragu untuk menyimpan informasi terkait kesehatan mereka.
Data Kit Kesehatan terbatas pada jenis yang ditentukan Apple. Jenis-jenis ini didefinisikan secara ketat: beberapa, seperti jenis darah, terbatas pada nilai tertentu dari enumerasi yang disediakan Apple, sementara yang lain menggabungkan besaran dengan satuan ukuran (seperti gram, kalori, dan liter). Bahkan data yang berbagi unit pengukuran yang kompatibel dibedakan oleh mereka HKObjectType
; misalnya, sistem jenis akan menangkap upaya yang HKQuantityTypeIdentifier.NumberOfTimesFallen
keliru untuk menyimpan nilai ke bidang yang HKQuantityTypeIdentifier.FlightsClimbed
mengharapkan meskipun keduanya menggunakan HKUnit.Count
satuan ukuran.
Jenis yang dapat disimpan di datastore Health Kit adalah semua subkelas dari HKObjectType
. HKCharacteristicType
objek menyimpan Jenis Kelamin Biologis, Jenis Darah, dan Tanggal Lahir. Namun, yang lebih umum adalah HKSampleType
objek, yang mewakili data yang diambil sampelnya pada waktu tertentu atau dalam jangka waktu tertentu.
HKSampleType
abstrak dan memiliki empat subkelas beton. Saat ini hanya ada satu jenis HKCategoryType
data, yaitu Analisis Tidur. Sebagian besar data dalam Kit Kesehatan berjenis HKQuantityType
dan menyimpan data mereka dalam HKQuantitySample
objek, yang dibuat menggunakan pola desain Factory yang sudah dikenal:
HKQuantityType
jenis berkisar dari HKQuantityTypeIdentifier.ActiveEnergyBurned
hingga HKQuantityTypeIdentifier.StepCount
.
Meminta Izin Dari Pengguna
Pengguna akhir harus mengambil langkah-langkah positif untuk memungkinkan aplikasi membaca atau menulis data Health Kit. Ini dilakukan melalui aplikasi Kesehatan yang telah diinstal sebelumnya di perangkat iOS 8. Saat pertama kali aplikasi Health Kit dijalankan, pengguna disajikan dengan dialog Akses Kesehatan yang dikontrol sistem:
Nantinya, pengguna dapat mengubah izin menggunakan dialog Sumber aplikasi Kesehatan:
Karena informasi kesehatan sangat sensitif, pengembang aplikasi harus menulis program mereka secara defensif, dengan harapan bahwa izin akan ditolak dan diubah saat aplikasi berjalan. Idiom yang paling umum adalah meminta izin dalam UIApplicationDelegate.OnActivated
metode dan kemudian memodifikasi antarmuka pengguna yang sesuai.
Panduan Izin
Dalam proyek yang disediakan Health Kit Anda, buka AppDelegate.cs
file . Perhatikan pernyataan menggunakan HealthKit
; di bagian atas file.
Kode berikut berkaitan dengan izin Health Kit:
private HKHealthStore healthKitStore = new HKHealthStore ();
public override void OnActivated (UIApplication application)
{
base.OnActivated(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;
}
}
Semua kode dalam metode ini dapat dilakukan sebaris di OnActivated
, tetapi aplikasi sampel menggunakan metode terpisah untuk membuat niat mereka lebih jelas: ValidateAuthorization()
memiliki langkah-langkah yang diperlukan untuk meminta akses ke jenis tertentu yang ditulis (dan dibaca, jika aplikasi diinginkan) dan ReactToHealthCarePermissions()
merupakan panggilan balik yang diaktifkan setelah pengguna berinteraksi dengan dialog izin di Health.app.
Tugasnya ValidateAuthorization()
adalah membangun set HKObjectTypes
aplikasi yang akan menulis dan meminta otorisasi untuk memperbarui data tersebut. Di aplikasi sampel, HKObjectType
adalah untuk kunci KHQuantityTypeIdentifierKey.HeartRate
. Jenis ini ditambahkan ke set typesToWrite
, sementara set typesToRead
dibiarkan kosong. Set ini, dan referensi ke ReactToHealthCarePermissions()
panggilan balik, diteruskan ke HKHealthStore.RequestAuthorizationToShare()
.
Panggilan ReactToHealthCarePermissions()
balik akan dipanggil setelah pengguna berinteraksi dengan dialog izin dan diteruskan dua bagian informasi: bool
nilai yang akan terjadi true
jika pengguna telah berinteraksi dengan dialog izin dan NSError
yang, jika tidak null, menunjukkan beberapa jenis kesalahan yang terkait dengan menyajikan dialog izin.
Penting
Agar jelas tentang argumen untuk fungsi ini: parameter keberhasilan dan kesalahan tidak menunjukkan apakah pengguna telah memberikan izin untuk mengakses data Health Kit! Mereka hanya menunjukkan bahwa pengguna telah diberi kesempatan untuk mengizinkan akses ke data.
Untuk mengonfirmasi apakah aplikasi memiliki akses ke data, yang HKHealthStore.GetAuthorizationStatus()
digunakan, meneruskan HKQuantityTypeIdentifierKey.HeartRate
. Berdasarkan status yang dikembalikan, aplikasi mengaktifkan atau menonaktifkan kemampuan untuk memasukkan data. Tidak ada pengalaman pengguna standar untuk menangani penolakan akses dan ada banyak opsi yang mungkin. Dalam contoh aplikasi, status diatur pada HeartRateModel
objek singleton yang, pada gilirannya, meningkatkan peristiwa yang relevan.
Model, Tampilan, dan Pengontrol
Untuk meninjau HeartRateModel
objek singleton, buka HeartRateModel.cs
file:
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()));
}
});
});
}
}
}
}
Bagian pertama adalah kode boilerplate untuk membuat peristiwa dan handler generik. Bagian HeartRateModel
awal kelas juga boilerplate untuk membuat objek singleton aman utas.
Kemudian, HeartRateModel
mengekspos 3 peristiwa:
EnabledChanged
- Menunjukkan bahwa penyimpanan denyut jantung telah diaktifkan atau dinonaktifkan (perhatikan bahwa penyimpanan awalnya dinonaktifkan).ErrorMessageChanged
- Untuk aplikasi sampel ini, kami memiliki model penanganan kesalahan yang sangat sederhana: string dengan kesalahan terakhir .HeartRateStored
- Dinaikkan ketika detak jantung disimpan dalam database Kit Kesehatan.
Perhatikan bahwa setiap kali peristiwa ini diaktifkan, itu dilakukan melalui NSObject.InvokeOnMainThread()
, yang memungkinkan pelanggan untuk memperbarui UI. Atau, peristiwa dapat didokumentasikan sebagai dinaikkan pada utas latar belakang dan tanggung jawab untuk memastikan kompatibilitas dapat diserahkan kepada penangan mereka. Pertimbangan utas penting dalam aplikasi Health Kit karena banyak fungsi, seperti permintaan izin, asinkron dan menjalankan panggilan balik mereka pada utas non-utama.
Kode khusus Heath Kit ada dalam HeartRateModel
dua fungsi HeartRateInBeatsPerMinute()
dan StoreHeartRate()
.
HeartRateInBeatsPerMinute()
mengonversi argumennya menjadi Kit HKQuantity
Kesehatan yang sangat ditik . Jenis kuantitas adalah yang ditentukan oleh HKQuantityTypeIdentifierKey.HeartRate
dan unit kuantitas HKUnit.Count
dibagi dengan (dengan HKUnit.Minute
kata lain, unit berdetak per menit).
Fungsi mengambil StoreHeartRate()
HKQuantity
(dalam aplikasi sampel, satu dibuat oleh HeartRateInBeatsPerMinute()
). Untuk memvalidasi datanya, ia menggunakan HKQuantity.IsCompatible()
metode , yang mengembalikan true
jika unit objek dapat dikonversi menjadi unit dalam argumen. Jika kuantitas dibuat dengan HeartRateInBeatsPerMinute()
ini jelas akan mengembalikan true
, tetapi juga akan kembali true
jika kuantitas dibuat sebagai, misalnya, Beats Per Hour. Lebih umum, HKQuantity.IsCompatible()
dapat digunakan untuk memvalidasi massa, jarak, dan energi yang mungkin dimasukkan atau ditampilkan pengguna atau perangkat dalam satu sistem pengukuran (seperti unit Kekaisaran) tetapi yang mungkin disimpan di sistem lain (seperti unit metrik).
Setelah kompatibilitas kuantitas divalidasi, HKQuantitySample.FromType()
metode pabrik digunakan untuk membuat objek yang diketik heartRateSample
dengan kuat. HKSample
objek memiliki tanggal mulai dan berakhir; untuk pembacaan seketika, nilai-nilai ini harus sama, seperti dalam contoh. Sampel juga tidak mengatur data nilai kunci dalam argumennya HKMetadata
, tetapi seseorang dapat menggunakan kode seperti kode berikut untuk menentukan lokasi sensor:
var hkm = new HKMetadata();
hkm.HeartRateSensorLocation = HKHeartRateSensorLocation.Chest;
heartRateSample
Setelah dibuat, kode membuat koneksi baru ke database dengan blok penggunaan. Dalam blok itu HKHealthStore.SaveObject()
, metode mencoba penulisan asinkron ke database. Panggilan yang dihasilkan ke ekspresi lambda memicu peristiwa yang relevan, baik HeartRateStored
atau ErrorMessageChanged
.
Sekarang setelah model telah diprogram, saatnya untuk melihat bagaimana pengontrol mencerminkan status model. HKWorkViewController.cs
Buka file. Konstruktor hanya menghubungkan HeartRateModel
metode singleton ke penanganan peristiwa (sekali lagi, ini dapat dilakukan sebaris dengan ekspresi lambda, tetapi metode terpisah membuat niat sedikit lebih jelas):
public HKWorkViewController (IntPtr handle) : base (handle)
{
HeartRateModel.Instance.EnabledChanged += OnEnabledChanged;
HeartRateModel.Instance.ErrorMessageChanged += OnErrorMessageChanged;
HeartRateModel.Instance.HeartRateStored += OnHeartBeatStored;
}
Berikut adalah handler yang relevan:
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);
}
Jelas, dalam aplikasi dengan satu pengontrol, dimungkinkan untuk menghindari pembuatan objek model terpisah dan penggunaan peristiwa untuk alur kontrol, tetapi penggunaan objek model lebih tepat untuk aplikasi dunia nyata.
Menjalankan aplikasi sampel
Simulator iOS tidak mendukung Health Kit. Penelusuran kesalahan harus dilakukan pada perangkat fisik yang menjalankan iOS 8.
Lampirkan perangkat pengembangan iOS 8 yang disediakan dengan benar ke sistem Anda. Pilih sebagai target penyebaran di Visual Studio untuk Mac dan dari menu pilih Jalankan > Debug.
Penting
Kesalahan yang berkaitan dengan provisi akan muncul pada saat ini. Untuk memecahkan masalah kesalahan, tinjau bagian Membuat dan Menyediakan Aplikasi Kit Kesehatan di atas. Komponennya adalah:
- iOS Dev Center - ID Aplikasi Eksplisit & Profil Provisi yang diaktifkan Kit Kesehatan.
- Opsi Proyek - Pengidentifikasi Bundel (ID Aplikasi eksplisit) & Profil Provisi.
- Kode sumber - Entitlements.plist & Info.plist
Dengan asumsi bahwa ketentuan telah ditetapkan dengan benar, aplikasi Anda akan dimulai. Ketika mencapai metodenya OnActivated
, ia akan meminta otorisasi Health Kit. Pertama kali ini ditemui oleh sistem operasi, pengguna Anda akan disajikan dengan dialog berikut:
Aktifkan aplikasi Anda untuk memperbarui data Heart Rate dan aplikasi Anda akan muncul kembali. Panggilan ReactToHealthCarePermissions
balik akan diaktifkan secara asinkron. Ini akan menyebabkan HeartRateModel’s
Enabled
properti berubah, yang akan meningkatkan EnabledChanged
peristiwa, yang akan menyebabkan HKPermissionsViewController.OnEnabledChanged()
penanganan aktivitas berjalan, yang memungkinkan tombol StoreData
. Diagram berikut menunjukkan urutannya:
Tekan tombol Rekam . Ini akan menyebabkan StoreData_TouchUpInside()
handler berjalan, yang akan mencoba mengurai nilai heartRate
bidang teks, mengonversi menjadi HKQuantity
melalui fungsi yang dibahas sebelumnya dan meneruskan HeartRateModel.HeartRateInBeatsPerMinute()
kuantitas tersebut ke HeartRateModel.StoreHeartRate()
. Seperti yang dibahas sebelumnya, ini akan mencoba menyimpan data dan akan menaikkan atau HeartRateStored
ErrorMessageChanged
peristiwa.
Klik dua kali tombol Beranda di perangkat Anda dan buka aplikasi Kesehatan. Klik tab Sumber dan Anda akan melihat aplikasi sampel tercantum. Pilih dan larang izin untuk memperbarui data denyut jantung. Klik dua kali tombol Beranda dan beralih kembali ke aplikasi Anda. Sekali lagi, ReactToHealthCarePermissions()
akan dipanggil, tetapi kali ini, karena akses ditolak, tombol StoreData akan dinonaktifkan (perhatikan bahwa ini terjadi secara asinkron dan perubahan antarmuka pengguna mungkin terlihat oleh pengguna akhir).
Topik tingkat lanjut
Membaca data dari database Health Kit sangat mirip dengan menulis data: satu menentukan jenis data yang coba diakses, meminta otorisasi, dan jika otorisasi tersebut diberikan, data tersedia, dengan konversi otomatis ke unit ukuran yang kompatibel.
Ada sejumlah fungsi kueri yang lebih canggih yang memungkinkan kueri dan kueri berbasis predikat yang melakukan pembaruan saat data yang relevan diperbarui.
Pengembang aplikasi Health Kit harus meninjau bagian Kit Kesehatan dari Panduan Tinjauan Aplikasi Apple.
Setelah model keamanan dan sistem jenis dipahami, menyimpan dan membaca data dalam database Health Kit bersama cukup mudah. Banyak fungsi dalam Health Kit beroperasi secara asinkron dan pengembang aplikasi harus menulis program mereka dengan tepat.
Pada penulisan artikel ini, saat ini tidak ada yang setara dengan Health Kit di Android atau Windows Phone.
Ringkasan
Dalam artikel ini kita telah melihat bagaimana Health Kit memungkinkan aplikasi untuk menyimpan, mengambil, dan berbagi informasi terkait kesehatan, sekaligus menyediakan aplikasi Kesehatan standar yang memungkinkan pengguna mengakses dan mengontrol data ini.
Kami juga telah melihat bagaimana privasi, keamanan, dan integritas data mengesampingkan kekhawatiran akan informasi dan aplikasi terkait kesehatan menggunakan Health Kit harus menangani peningkatan kompleksitas dalam aspek manajemen aplikasi (provisi), pengodean (sistem jenis Kit Kesehatan), dan pengalaman pengguna (kontrol pengguna izin melalui dialog sistem dan aplikasi Kesehatan).
Terakhir, kami telah melihat implementasi sederhana Health Kit menggunakan aplikasi sampel yang disertakan yang menulis data heartbeat ke penyimpanan Health Kit dan memiliki desain sadar asinkron.