README.md 36.6 KB
Newer Older
Terrillo Walls's avatar
Terrillo Walls committed
1 2
# React Native Apple Healthkit
A React Native bridge module for interacting with [Apple Healthkit] data.
Greg Wilson's avatar
Greg Wilson committed
3

Terrillo Walls's avatar
Terrillo Walls committed
4
![Alt text](https://devimages.apple.com.edgekey.net/assets/elements/icons/Healthkit/Healthkit-64x64.png "Apple Healthkit")
Greg Wilson's avatar
Greg Wilson committed
5

Greg Wilson's avatar
Greg Wilson committed
6
## Table of Contents
Greg Wilson's avatar
Greg Wilson committed
7
  * [Getting Started](#getting-started)
Greg Wilson's avatar
Greg Wilson committed
8
    * [Installation](#installation)
Greg Wilson's avatar
Greg Wilson committed
9 10 11 12
    * [Usage](#usage)
  * [Documentation](#documentation)
    * [Permissions](#permissions)
    * [Methods](#methods)
Greg Wilson's avatar
Greg Wilson committed
13
      * [isAvailable](#isavailable)
Terrillo Walls's avatar
Terrillo Walls committed
14
      * [initHealthkit](#initHealthkit)
Greg Wilson's avatar
Greg Wilson committed
15 16
      * [getBiologicalSex](#getbiologicalsex)
      * [getDateOfBirth](#getdateofbirth)
Greg Wilson's avatar
Greg Wilson committed
17
      * [getStepCount](#getstepcount)
Greg Wilson's avatar
Greg Wilson committed
18
      * [getDailyStepCountSamples](#getdailystepcountsamples)
19
      * [initStepCountObserver](#initstepcountobserver)
Greg Wilson's avatar
Greg Wilson committed
20
      * [saveSteps](#savesteps)
Greg Wilson's avatar
Greg Wilson committed
21 22 23
      * [getDistanceWalkingRunning](#getdistancewalkingrunning)
      * [getDistanceCycling](#getdistancecycling)
      * [getFlightsClimbed](#getflightsclimbed)
Greg Wilson's avatar
Greg Wilson committed
24
      * [getLatestWeight](#getlatestweight)
Greg Wilson's avatar
Greg Wilson committed
25
      * [getWeightSamples](#getweightsamples)
Greg Wilson's avatar
Greg Wilson committed
26 27
      * [saveWeight](#saveweight)
      * [getLatestHeight](#getlatestheight)
Greg Wilson's avatar
Greg Wilson committed
28
      * [getHeightSamples](#getheightsamples)
Greg Wilson's avatar
Greg Wilson committed
29 30 31 32 33
      * [saveHeight](#saveheight)
      * [getLatestBmi](#getlatestbmi)
      * [saveBmi](#savebmi)
      * [getLatestBodyFatPercentage](#getlatestbodyfatpercentage)
      * [getLatestLeanBodyMass](#getlatestleanbodymass)
Daniele Volpi's avatar
Daniele Volpi committed
34 35 36 37 38
      * [getHeartRateSamples](#getheartratesamples)
      * [getBodyTemperatureSamples](#getbodytemperaturesamples)
      * [getBloodPressureSamples](#getbloodpressuresamples)
      * [getRespiratoryRateSamples](#getrespiratoryratesamples)
      * [getBloodGlucoseSamples](#getbloodglucosesamples)
39
      * [getSleepSamples](#getsleepsamples)
skleest's avatar
skleest committed
40
      * [saveMindfulSession](#saveMindfulSession)
41

Terrillo Walls's avatar
Terrillo Walls committed
42
## References
Terrillo Walls's avatar
Terrillo Walls committed
43
- Apple Healthkit Documentation [https://developer.apple.com/Healthkit/](https://developer.apple.com/Healthkit/)
Greg Wilson's avatar
Greg Wilson committed
44

Greg Wilson's avatar
Greg Wilson committed
45 46
## Getting started

Greg Wilson's avatar
Greg Wilson committed
47 48
###  Installation

Terrillo Walls's avatar
Terrillo Walls committed
49
Install the [rn-apple-Healthkit] package from npm:
Greg Wilson's avatar
Greg Wilson committed
50

Terrillo Walls's avatar
Terrillo Walls committed
51
`npm install rn-apple-Healthkit --save`
Greg Wilson's avatar
Greg Wilson committed
52

Greg Wilson's avatar
Greg Wilson committed
53
##### Xcode
54

Greg Wilson's avatar
Greg Wilson committed
55
1. In XCode, in the project navigator, right click `Libraries``Add Files to [your project's name]`
Terrillo Walls's avatar
Terrillo Walls committed
56 57 58 59 60
2. Go to `node_modules``rn-apple-Healthkit` and add `RCTAppleHealthkit.xcodeproj`
3. In XCode, in the project navigator, select your project. Add `libRCTAppleHealthkit.a` to your project's `Build Phases``Link Binary With Libraries`
4. Click `RCTAppleHealthkit.xcodeproj` in the project navigator and go the `Build Settings` tab. Make sure 'All' is toggled on (instead of 'Basic'). In the `Search Paths` section, look for `Header Search Paths` and make sure it contains both `$(SRCROOT)/../../react-native/React` and `$(SRCROOT)/../../../React` - mark both as `recursive`.
5. Enable Healthkit in your application's `Capabilities`
![Alt text](/examples/images/Capabilities_Healthkit.png "Xcode Capabilities Section")
Greg Wilson's avatar
Greg Wilson committed
61

Greg Wilson's avatar
Greg Wilson committed
62
6. Compile and run
Greg Wilson's avatar
Greg Wilson committed
63

Greg Wilson's avatar
Greg Wilson committed
64
### Usage
Greg Wilson's avatar
Greg Wilson committed
65

Terrillo Walls's avatar
Terrillo Walls committed
66
Just `import` the `rn-apple-Healthkit` module and you're ready to go!
Terrillo Walls's avatar
Terrillo Walls committed
67

Greg Wilson's avatar
Greg Wilson committed
68
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
69
import AppleHealthkit from 'rn-apple-Healthkit';
Greg Wilson's avatar
Greg Wilson committed
70

Greg Wilson's avatar
Greg Wilson committed
71
let options = {
Greg Wilson's avatar
Greg Wilson committed
72
    permissions: {
Greg Wilson's avatar
Greg Wilson committed
73 74
        read: ["Height", "Weight", "StepCount", "DateOfBirth", "BodyMassIndex"],
        write: ["Weight", "StepCount", "BodyMassIndex"]
Greg Wilson's avatar
Greg Wilson committed
75 76 77
    }
};

Terrillo Walls's avatar
Terrillo Walls committed
78 79 80
AppleHealthkit.initHealthkit(options: Object, (err: Object, results: Object) => {
    if (err) {
        console.log("error initializing Healthkit: ", err);
Greg Wilson's avatar
Greg Wilson committed
81 82
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
83
    // Healthkit initialized...
Greg Wilson's avatar
Greg Wilson committed
84 85 86 87 88
});


```

Terrillo Walls's avatar
Terrillo Walls committed
89
When the module has been successfully initialized you can read and write Healthkit data
Greg Wilson's avatar
Greg Wilson committed
90 91

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
92
import AppleHealthkit from 'rn-apple-Healthkit';
Greg Wilson's avatar
Greg Wilson committed
93

Terrillo Walls's avatar
Terrillo Walls committed
94
AppleHealthkit.initHealthkit(null: Object, (err: string, results: Object) => {
Greg Wilson's avatar
Greg Wilson committed
95

Terrillo Walls's avatar
Terrillo Walls committed
96
  ...
Greg Wilson's avatar
Greg Wilson committed
97

Terrillo Walls's avatar
Terrillo Walls committed
98
  AppleHealthkit.getLatestWeight(null, (err: Object, weight: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
99 100 101 102
      if(err){
          console.log("error getting current weight: ", err);
          return;
      }
Terrillo Walls's avatar
Terrillo Walls committed
103
      // use weight.value
Terrillo Walls's avatar
Terrillo Walls committed
104 105 106 107
  });

  ...

Terrillo Walls's avatar
Terrillo Walls committed
108 109 110 111
  let options = {
    value: 200
  };
  AppleHealthkit.saveWeight(options: Object, (err: Object, results: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
112
      if (err) {
Terrillo Walls's avatar
Terrillo Walls committed
113
          console.log("error saving weight to Healthkit: ", err);
Terrillo Walls's avatar
Terrillo Walls committed
114 115 116 117 118 119
          return;
      }
      // weight successfully saved
  });

}
Greg Wilson's avatar
Greg Wilson committed
120 121 122


```
Greg Wilson's avatar
Greg Wilson committed
123 124


Greg Wilson's avatar
Greg Wilson committed
125 126
## Documentation

Terrillo Walls's avatar
Terrillo Walls committed
127
### Permissions
Greg Wilson's avatar
Greg Wilson committed
128

Terrillo Walls's avatar
Terrillo Walls committed
129
The available Healthkit permissions to use with `initHealthkit`
Greg Wilson's avatar
Greg Wilson committed
130

Terrillo Walls's avatar
Terrillo Walls committed
131
| Permission             | Healthkit Identifier Type                                                                                                                                      | Read | Write |
Greg Wilson's avatar
Greg Wilson committed
132
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|------|-------|
133
<<<<<<< HEAD
Terrillo Walls's avatar
Terrillo Walls committed
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
| ActiveEnergyBurned     | [HKQuantityTypeIdentifierActiveEnergyBurned](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifieractiveenergyburned?language=objc)         | ✓    | ✓     |
| AppleExerciseTime      | [HKQuantityTypeIdentifierAppleExerciseTime](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierappleexercisetime?language=objc)           | ✓    |       |
| BasalEnergyBurned      | [HKQuantityTypeIdentifierBasalEnergyBurned](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierbasalenergyburned?language=objc)           | ✓    | ✓     |
| BiologicalSex          | [HKCharacteristicTypeIdentifierBiologicalSex](https://developer.apple.com/reference/Healthkit/hkcharacteristictypeidentifierbiologicalsex?language=objc)       | ✓    |       |
| BloodGlucose           | [HKQuantityTypeIdentifierBloodGlucose](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierbloodglucose?language=objc)                     | ✓    |       |
| BodyMassIndex          | [HKQuantityTypeIdentifierBodyMassIndex](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierbodymassindex?language=objc)                   | ✓    | ✓     |
| BodyTemperature        | [HKQuantityTypeIdentifierBodyTemperature](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierbodytemperature?language=objc)               | ✓    |       |
| DateOfBirth            | [HKCharacteristicTypeIdentifierDateOfBirth](https://developer.apple.com/reference/Healthkit/hkcharacteristictypeidentifierdateofbirth?language=objc)           | ✓    |       |
| DietaryEnergy          | [HKQuantityTypeIdentifierDietaryEnergyConsumed](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierdietaryenergyconsumed?language=objc)   | ✓    | ✓     |
| DistanceCycling        | [HKQuantityTypeIdentifierDistanceCycling](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierdistancecycling?language=objc)               | ✓    | ✓     |
| DistanceWalkingRunning | [HKQuantityTypeIdentifierDistanceWalkingRunning](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierdistancewalkingrunning?language=objc) | ✓    | ✓     |
| FlightsClimbed         | [HKQuantityTypeIdentifierFlightsClimbed](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierflightsclimbed?language=objc)                 | ✓    | ✓     |
| HeartRate              | [HKQuantityTypeIdentifierHeartRate](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierheartrate?language=objc)                           | ✓    |       |
| Height                 | [HKQuantityTypeIdentifierHeight](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierheight?language=objc)                                 | ✓    | ✓     |
| LeanBodyMass           | [HKQuantityTypeIdentifierLeanBodyMass](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierleanbodymass?language=objc)                     | ✓    | ✓     |
| NikeFuel               | [HKQuantityTypeIdentifierNikeFuel](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifiernikefuel?language=objc)                             | ✓    |       |
| RespiratoryRate        | [HKQuantityTypeIdentifierRespiratoryRate](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierrespiratoryrate?language=objc)               | ✓    |       |
| SleepAnalysis          | [HKCategoryTypeIdentifierSleepAnalysis](https://developer.apple.com/reference/Healthkit/hkcategorytypeidentifiersleepanalysis?language=objc)                   | ✓    |       |
| StepCount              | [HKQuantityTypeIdentifierStepCount](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierstepcount?language=objc)                           | ✓    | ✓     |
| Steps                  | [HKQuantityTypeIdentifierSteps](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifiersteps?language=objc)                                   | ✓    | ✓     |
| Weight                 | [HKQuantityTypeIdentifierBodyMass](https://developer.apple.com/reference/Healthkit/hkquantitytypeidentifierbodymass?language=objc)                             | ✓    | ✓     |

These permissions are exported as constants of the `rn-apple-Healthkit` module.
Greg Wilson's avatar
Greg Wilson committed
157 158


Terrillo Walls's avatar
Terrillo Walls committed
159
## Methods
160
=======
Greg Wilson's avatar
Greg Wilson committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
| DateOfBirth            | [HKCharacteristicTypeIdentifierDateOfBirth](https://developer.apple.com/reference/healthkit/hkcharacteristictypeidentifierdateofbirth?language=objc)           | ✓    |       |
| BiologicalSex          | [HKCharacteristicTypeIdentifierBiologicalSex](https://developer.apple.com/reference/healthkit/hkcharacteristictypeidentifierbiologicalsex?language=objc)       | ✓    |       |
| Height                 | [HKQuantityTypeIdentifierHeight](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierheight?language=objc)                                 | ✓    | ✓     |
| Weight                 | [HKQuantityTypeIdentifierBodyMass](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbodymass?language=objc)                             | ✓    | ✓     |
| BodyFatPercentage      | [HKQuantityTypeIdentifierBodyFatPercentage](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbodyfatpercentage?language=objc)           | ✓    | ✓     |
| BodyMassIndex          | [HKQuantityTypeIdentifierBodyMassIndex](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbodymassindex?language=objc)                   | ✓    | ✓     |
| LeanBodyMass           | [HKQuantityTypeIdentifierLeanBodyMass](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierleanbodymass?language=objc)                     | ✓    | ✓     |
| StepCount              | [HKQuantityTypeIdentifierStepCount](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierstepcount?language=objc)                           | ✓    | ✓     |
| DistanceWalkingRunning | [HKQuantityTypeIdentifierDistanceWalkingRunning](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierdistancewalkingrunning?language=objc) | ✓    | ✓     |
| DistanceCycling        | [HKQuantityTypeIdentifierDistanceCycling](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierdistancecycling?language=objc)               | ✓    | ✓     |
| BasalEnergyBurned      | [HKQuantityTypeIdentifierBasalEnergyBurned](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbasalenergyburned?language=objc)           | ✓    | ✓     |
| ActiveEnergyBurned     | [HKQuantityTypeIdentifierActiveEnergyBurned](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifieractiveenergyburned?language=objc)         | ✓    | ✓     |
| FlightsClimbed         | [HKQuantityTypeIdentifierFlightsClimbed](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierflightsclimbed?language=objc)                 | ✓    | ✓     |
| NikeFuel               | [HKQuantityTypeIdentifierNikeFuel](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifiernikefuel?language=objc)                             | ✓    |       |
| AppleExerciseTime      | [HKQuantityTypeIdentifierAppleExerciseTime](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierappleexercisetime?language=objc)           | ✓    |       |
| DietaryEnergy          | [HKQuantityTypeIdentifierDietaryEnergyConsumed](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierdietaryenergyconsumed?language=objc)   | ✓    | ✓     |
Daniele Volpi's avatar
Daniele Volpi committed
177 178 179 180 181
| HeartRate              | [HKQuantityTypeIdentifierHeartRate](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierheartrate?language=objc)                           | ✓    |       |
| BodyTemperature        | [HKQuantityTypeIdentifierBodyTemperature](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbodytemperature?language=objc)               | ✓    |       |
| BloodPressureSystolic  | [HKQuantityTypeIdentifierBloodPressureSystolic](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbloodpressuresystolic?language=objc)   | ✓    |       |
| BloodPressureDiastolic | [HKQuantityTypeIdentifierBloodPressureDiastolic](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbloodpressurediastolic?language=objc) | ✓    |       |
| RespiratoryRate        | [HKQuantityTypeIdentifierRespiratoryRate](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierrespiratoryrate?language=objc)               | ✓    |       |
182 183 184
| BloodGlucose           | [HKQuantityTypeIdentifierBloodGlucose](https://developer.apple.com/reference/healthkit/hkquantitytypeidentifierbloodglucose?language=objc)                     | ✓    |       
|
| SleepAnalysis          | [HKCategoryTypeIdentifierSleepAnalysis](https://developer.apple.com/reference/healthkit/hkcategorytypeidentifiersleepanalysis?language=objc)                   | ✓    |     
skleest's avatar
skleest committed
185 186
| MindfulSession         | [HKCategoryTypeIdentifierMindfulSession](https://developer.apple.com/reference/healthkit/hkcategorytypeidentifiermindfulsession?language=objc)                 |      |  ✓    |

Daniele Volpi's avatar
Daniele Volpi committed
187

Greg Wilson's avatar
Greg Wilson committed
188

Greg Wilson's avatar
Greg Wilson committed
189 190 191 192 193 194 195 196 197 198
These permissions are exported as constants of the `react-native-apple-healthkit` module.

```javascript
import AppleHealthKit from 'react-native-apple-healthkit';

...

// get the available permissions from AppleHealthKit.Constants object
const PERMS = AppleHealthKit.Constants.Permissions;

Greg Wilson's avatar
Greg Wilson committed
199
// setup healthkit read/write permissions using PERMS
Greg Wilson's avatar
Greg Wilson committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
const healthKitOptions = {
    permissions: {
        read:  [
            PERMS.StepCount,
            PERMS.Height,
        ],
        write: [
            PERMS.StepCount
        ],
    }
};

...
```

Greg Wilson's avatar
Greg Wilson committed
215

Greg Wilson's avatar
Greg Wilson committed
216 217
Options
-------
Greg Wilson's avatar
Greg Wilson committed
218 219


Greg Wilson's avatar
Greg Wilson committed
220 221
Methods
-------
222
>>>>>>> 5adade4a95b5b3cd1816a8d203c1e36a702cfa8a
Greg Wilson's avatar
Greg Wilson committed
223

224
#### **`isAvailable`**
Terrillo Walls's avatar
Terrillo Walls committed
225
Check if Healthkit is available on the device.
Greg Wilson's avatar
Greg Wilson committed
226
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
227
import AppleHealthkit from 'rn-apple-Healthkit';
Terrillo Walls's avatar
Terrillo Walls committed
228

Terrillo Walls's avatar
Terrillo Walls committed
229 230
AppleHealthkit.isAvailable((err: Object, available: boolean) => {
    if (available) {
Greg Wilson's avatar
Greg Wilson committed
231 232 233 234
        // ...
    }
});
```
Greg Wilson's avatar
Greg Wilson committed
235
___
Greg Wilson's avatar
Greg Wilson committed
236

Terrillo Walls's avatar
Terrillo Walls committed
237 238
#### **`initHealthkit`**
Initialize Healthkit. This will show the Healthkit permissions prompt for any read/write permissions set in the required `options` object.
Greg Wilson's avatar
Greg Wilson committed
239

240
Due to Apple's privacy model if an app user has previously denied a specific permission then they can not be prompted again for that same permission. The app user would have to go into the Apple Health app and grant the permission to your react-native app under *sources* tab.
Greg Wilson's avatar
Greg Wilson committed
241

Terrillo Walls's avatar
Terrillo Walls committed
242
For any data that is read from Healthkit the status/error is the same for both. This privacy restriction results in having no knowledge of whether the permission was denied (make sure it's added to the permissions options object), or the data for the specific request was nil (ex. no steps recorded today).
Greg Wilson's avatar
Greg Wilson committed
243

Terrillo Walls's avatar
Terrillo Walls committed
244
For any data written to Healthkit an authorization error can be caught. If an authorization error occurs you can prompt the user to set the specific permission or add the permission to the options object if not present.
Greg Wilson's avatar
Greg Wilson committed
245

Terrillo Walls's avatar
Terrillo Walls committed
246
If new read/write permissions are added to the options object then the app user will see the Healthkit permissions prompt with the new permissions to allow.
Greg Wilson's avatar
Greg Wilson committed
247

Terrillo Walls's avatar
Terrillo Walls committed
248
`initHealthkit` requires an options object with Healthkit permission settings
Greg Wilson's avatar
Greg Wilson committed
249
```javascript
Greg Wilson's avatar
Greg Wilson committed
250
let options = {
Greg Wilson's avatar
Greg Wilson committed
251
    permissions: {
Greg Wilson's avatar
Greg Wilson committed
252 253
        read: ["Height", "Weight", "StepCount", "DateOfBirth", "BodyMassIndex"],
        write: ["Weight", "StepCount", "BodyMassIndex"]
Greg Wilson's avatar
Greg Wilson committed
254 255
    }
};
Greg Wilson's avatar
Greg Wilson committed
256
```
Greg Wilson's avatar
Greg Wilson committed
257

Greg Wilson's avatar
Greg Wilson committed
258
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
259
AppleHealthkit.initHealthkit(options: Object, (err: string, results: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
260
    if (err) {
Terrillo Walls's avatar
Terrillo Walls committed
261
        console.log("error initializing Healthkit: ", err);
Greg Wilson's avatar
Greg Wilson committed
262 263
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
264 265
    // Healthkit is initialized...
    // now safe to read and write Healthkit data...
Greg Wilson's avatar
Greg Wilson committed
266 267 268
});
```

Greg Wilson's avatar
Greg Wilson committed
269 270
___

Greg Wilson's avatar
Greg Wilson committed
271
#### **`getBiologicalSex`**
Greg Wilson's avatar
Greg Wilson committed
272
Get the biological sex (gender). If the `BiologicalSex` read permission is missing or the user has denied it then the value will be `unknown`. The possible values are:
Greg Wilson's avatar
Greg Wilson committed
273

Greg Wilson's avatar
Greg Wilson committed
274 275 276 277 278 279 280 281
| Value   | HKBiologicalSex       |
|---------|-----------------------|
| unknown | HKBiologicalSexNotSet |
| male    | HKBiologicalSexMale   |
| female  | HKBiologicalSexFemale |
| other   | HKBiologicalSexOther  |

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
282 283 284
AppleHealthkit.getBiologicalSex(null, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getBiologicalSex')) {
      return;
Greg Wilson's avatar
Greg Wilson committed
285
    }
Terrillo Walls's avatar
Terrillo Walls committed
286
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
287 288 289
});
```

Terrillo Walls's avatar
Terrillo Walls committed
290 291 292 293 294 295
```javascript
{
	value: 'female',
}
```

Greg Wilson's avatar
Greg Wilson committed
296 297
___

Greg Wilson's avatar
Greg Wilson committed
298
#### **`getDateOfBirth`**
299
Get the date of birth.
Greg Wilson's avatar
Greg Wilson committed
300

Greg Wilson's avatar
Greg Wilson committed
301
On success, the callback function will be provided with a `res` object containing dob `value: string` (ISO timestamp), and `age: number` (age in years):
Terrillo Walls's avatar
Terrillo Walls committed
302 303 304 305 306 307 308 309 310
```javascript
AppleHealthkit.getDateOfBirth(null, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getDateOfBirth')) {
        return;
    }
    console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
311
```javascript
312 313 314
{
	value: '1986-09-01T00:00:00.000-0400',
	age: 29
315 316 317
}
```

Greg Wilson's avatar
Greg Wilson committed
318 319
___

Greg Wilson's avatar
Greg Wilson committed
320
#### **`getStepCount`**
321
Get the aggregated total steps for a specific day (starting and ending at midnight).
Greg Wilson's avatar
Greg Wilson committed
322

323
An optional options object may be provided containing `date` field representing the selected day. If `date` is not set or an options object is not provided then the current day will be used.
Greg Wilson's avatar
Greg Wilson committed
324
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
325
let d = new Date(2016,1,1);
Greg Wilson's avatar
Greg Wilson committed
326 327 328 329 330
let options = {
    date: d.toISOString()
};
```

Greg Wilson's avatar
Greg Wilson committed
331
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
332 333
AppleHealthkit.getStepCount(options: Object, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getStepCount')) {
Greg Wilson's avatar
Greg Wilson committed
334 335
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
336
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
337 338 339
});
```

Terrillo Walls's avatar
Terrillo Walls committed
340 341 342 343 344 345
```javascript
{
	value: 213,
}
```

Greg Wilson's avatar
Greg Wilson committed
346 347
___

Greg Wilson's avatar
Greg Wilson committed
348
#### **`getDailyStepCountSamples`**
349
Get the total steps per day over a specified date range.
Greg Wilson's avatar
Greg Wilson committed
350

Greg Wilson's avatar
Greg Wilson committed
351
`getDailyStepCountSamples` accepts an options object containing required *`startDate: ISO8601Timestamp`* and optional *`endDate: ISO8601Timestamp`*. If `endDate` is not provided it will default to the current time
Greg Wilson's avatar
Greg Wilson committed
352 353
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
354 355
    startDate: (new Date(2016,1,1)).toISOString() // required
    endDate:   (new Date()).toISOString() // optional; default now
Greg Wilson's avatar
Greg Wilson committed
356 357
};
```
Terrillo Walls's avatar
Terrillo Walls committed
358 359 360 361 362 363 364 365 366 367

```javascript
 AppleHealthkit.getDailyStepCountSamples(options: Object, (err: Object, results: Array<Object>) => {
    if (this._handleHealthkitError(err, 'getDailyStepCountSamples')) {
        return;
    }
    console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
368
The function will be called with an array of elements. Each element is an object containing `value`, `startDate`, and `endDate` fields:
Greg Wilson's avatar
Greg Wilson committed
369
```javascript
370
[
Greg Wilson's avatar
Greg Wilson committed
371 372 373 374 375 376
  { value: 8, startDate: '2016-07-09T00:00:00.000-0400', endDate: '2016-07-10T00:00:00.000-0400' },
  { value: 1923, startDate: '2016-07-08T00:00:00.000-0400', endDate: '2016-07-09T00:00:00.000-0400' },
  { value: 1802, startDate: '2016-07-07T00:00:00.000-0400', endDate: '2016-07-08T00:00:00.000-0400' },
]
```

Greg Wilson's avatar
Greg Wilson committed
377 378
___

379 380 381
#### **`initStepCountObserver`**
Setup an HKObserverQuery for step count (HKQuantityTypeIdentifierStepCount) that will
trigger an event listenable on react-native `NativeAppEventEmitter` when the
Terrillo Walls's avatar
Terrillo Walls committed
382
Healthkit step count has changed.
Greg Wilson's avatar
Greg Wilson committed
383

384 385 386 387 388
The `initStepCountObserver` method must be called before adding a listener to
NativeAppEventEmitter. After the step count observer has been initialized you can
listen to the NativeAppEventEmitter `change:steps` event and re-fetch relevent
step count data in the event handler.

Terrillo Walls's avatar
Terrillo Walls committed
389 390
The `initStepCountObserver` method should be called after Healthkit has been
successfully initialized (AppleHealthkit.initHealthkit has been called without
391
error).
392 393

```javascript
394 395 396 397 398 399
// import NativeAppEventEmitter from react-native
import {
  Navigator,
  View,
  NativeAppEventEmitter,
} from 'react-native';
Terrillo Walls's avatar
Terrillo Walls committed
400
```
401 402


Terrillo Walls's avatar
Terrillo Walls committed
403 404 405
```javascript
AppleHealthkit.initHealthkit(HKOPTIONS, (err, res) => {
  if (this._handleHKError(err, 'initHealthkit')) {
406 407 408 409
    return;
  }

  // initialize the step count observer
Terrillo Walls's avatar
Terrillo Walls committed
410
  AppleHealthkit.initStepCountObserver({}, () => {});
411 412 413 414 415 416 417 418 419 420 421 422 423

  // add event listener for 'change:steps' and handle the
  // event in the event handler function.
  //
  // when adding a listener, a 'subscription' object is
  // returned that must be used to remove the listener
  // when the component unmounts. The subscription object
  // must be accessible to any function/method/instance
  // that will be unsubscribing from the event.
  this.sub = NativeAppEventEmitter.addListener(
    'change:steps',
    (evt) => {
      // a 'change:steps' event has been received. step
Terrillo Walls's avatar
Terrillo Walls committed
424
      // count data should be re-fetched from Healthkit.
425
      this._fetchStepCountData();
426
    }
427
  );
Greg Wilson's avatar
Greg Wilson committed
428

Terrillo Walls's avatar
Terrillo Walls committed
429 430
  // other tasks to perform after Healthkit has been
  // initialized (fetch relevant Healthkit data).
Greg Wilson's avatar
Greg Wilson committed
431
  this._fetchStepCountData();
Terrillo Walls's avatar
Terrillo Walls committed
432
  this._fetchOtherRelevantHealthkitData();
Greg Wilson's avatar
Greg Wilson committed
433
  // ...
434
});
435 436 437 438 439

...

// when the component where the listener was added unmounts
// (or whenever the listener should be removed), call the
Greg Wilson's avatar
Greg Wilson committed
440
// 'remove' method of the subscription object.
441 442 443
componentWillUnmount() {
  this.sub.remove();
}
444 445 446 447
```

___

Greg Wilson's avatar
Greg Wilson committed
448
#### **`saveSteps`**
Greg Wilson's avatar
Greg Wilson committed
449
Save a step count sample.
Greg Wilson's avatar
Greg Wilson committed
450

Greg Wilson's avatar
Greg Wilson committed
451
A step count sample represents the number of steps during a specific period of time. A sample should be a precise as possible, with startDate and endDate representing the range of time the steps were taken in.
Greg Wilson's avatar
Greg Wilson committed
452 453 454

`saveSteps` accepts an options object containing required *`value: number`*, *`startDate: ISO8601Timestamp`*, and *`endDate: ISO8601Timestamp`*.
```javascript
455
// startDate and endDate are 30 minutes apart.
Terrillo Walls's avatar
Terrillo Walls committed
456
// this means the step count value occurred within those 30 minutes.
Greg Wilson's avatar
Greg Wilson committed
457
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
458 459 460
  value: 100,
  startDate: (new Date(2016,6,2,6,0,0)).toISOString(),
  endDate: (new Date(2016,6,2,6,30,0)).toISOString()
Greg Wilson's avatar
Greg Wilson committed
461 462 463 464
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
465 466 467 468 469
AppleHealthkit.saveSteps(options, (err, res) => {
  if (this._handleHKError(err, 'saveSteps')) {
    return;
  }
  // step count sample successfully saved
Greg Wilson's avatar
Greg Wilson committed
470 471 472 473 474
});
```

___

Greg Wilson's avatar
Greg Wilson committed
475
#### **`getDistanceWalkingRunning`**
476
Get the total distance walking/running on a specific day.
Greg Wilson's avatar
Greg Wilson committed
477

Greg Wilson's avatar
Greg Wilson committed
478
`getDistanceWalkingRunning` accepts an options object containing optional *`date: ISO8601Timestamp`* and *`unit: string`*. If `date` is not provided it will default to the current time. `unit` defaults to `meter`.
479

Greg Wilson's avatar
Greg Wilson committed
480 481
```javascript
let options = {
482 483
  unit: 'mile', // optional; default 'meter'
  date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
484
};
Terrillo Walls's avatar
Terrillo Walls committed
485
```
Greg Wilson's avatar
Greg Wilson committed
486

Terrillo Walls's avatar
Terrillo Walls committed
487 488 489
```javascript
AppleHealthkit.getDistanceWalkingRunning(options: Object, (err: Object, results: Object) => {
    if (this._handleHKError(err, 'getDistanceWalkingRunning')) {
Greg Wilson's avatar
Greg Wilson committed
490 491
    	return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
492
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
493 494 495
});
```

496 497
```javascript
{
Terrillo Walls's avatar
Terrillo Walls committed
498
	value: 1.45,
499 500 501 502 503
	startDate: '2016-07-08T12:00:00.000-0400',
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
504 505 506
___

#### **`getDistanceCycling`**
507
Get the total distance cycling on a specific day.
Greg Wilson's avatar
Greg Wilson committed
508

Greg Wilson's avatar
Greg Wilson committed
509
`getDistanceCycling` accepts an options object containing optional *`date: ISO8601Timestamp`* and *`unit: string`*. If `date` is not provided it will default to the current time. `unit` defaults to `meter`
Greg Wilson's avatar
Greg Wilson committed
510 511
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
512 513
  unit: 'mile', // optional; default 'meter'
  date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
514 515 516 517
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
518 519
AppleHealthkit.getDistanceCycling(options: Object, (err: Object, results: Object) => {
    if (err) {
Greg Wilson's avatar
Greg Wilson committed
520 521
    	return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
522
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
523 524 525
});
```

Terrillo Walls's avatar
Terrillo Walls committed
526 527 528 529 530 531 532 533
```javascript
{
	value: 11.45,
	startDate: '2016-07-08T12:00:00.000-0400',
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
534 535 536
___

#### **`getFlightsClimbed`**
537
get the total flights climbed (1 flight is ~10ft of elevation) on a specific day.
Greg Wilson's avatar
Greg Wilson committed
538 539 540 541

`getFlightsClimbed` accepts an options object containing optional *`date: ISO8601Timestamp`*. if `date` is not provided it will default to the current time.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
542
    date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
543 544 545 546
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
547 548 549 550 551
AppleHealthkit.getFlightsClimbed(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  console.log(results)
Greg Wilson's avatar
Greg Wilson committed
552 553 554
});
```

Terrillo Walls's avatar
Terrillo Walls committed
555 556 557 558 559 560 561 562
```javascript
{
	value: 15,
	startDate: '2016-07-08T12:00:00.000-0400',
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
563 564
___

565
#### **`getLatestWeight`**
Greg Wilson's avatar
Greg Wilson committed
566 567
Get the most recent weight sample.

Greg Wilson's avatar
Greg Wilson committed
568
On success, the callback function will be provided with a `weight` object containing the weight `value`, and the `startDate` and `endDate` of the weight sample. *Note: startDate and endDate will be the same as weight samples are saved at a specific point in time.*
Terrillo Walls's avatar
Terrillo Walls committed
569 570

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
571 572 573 574
let options = {
  unit: 'pound'
};
```
Terrillo Walls's avatar
Terrillo Walls committed
575

Terrillo Walls's avatar
Terrillo Walls committed
576 577 578 579 580 581 582
```javascript
AppleHealthkit.getLatestWeight(options, (err: string, results: Object) => {
  if (err) {
    console.log("error getting latest weight: ", err);
    return;
  }
  console.log(results)
Terrillo Walls's avatar
Terrillo Walls committed
583 584 585
});
```

Greg Wilson's avatar
Greg Wilson committed
586 587 588
```javascript
{
	value: 200,
589
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
590 591 592 593
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
594 595
___

Greg Wilson's avatar
Greg Wilson committed
596 597 598 599
#### **`getWeightSamples`**
query for weight samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
600 601 602 603 604
  unit: 'pound', // optional; default 'pound'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false,	// optional; default false
  limit:10, // optional; default no limit
Greg Wilson's avatar
Greg Wilson committed
605 606 607 608
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
609 610 611 612 613
AppleHealthkit.getWeightSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Greg Wilson's avatar
Greg Wilson committed
614 615 616
});
```

Terrillo Walls's avatar
Terrillo Walls committed
617 618 619 620 621 622 623 624
```javascript
[
  { value: 160, startDate: '2016-07-09T00:00:00.000-0400', endDate: '2016-07-10T00:00:00.000-0400' },
  { value: 161, startDate: '2016-07-08T00:00:00.000-0400', endDate: '2016-07-09T00:00:00.000-0400' },
  { value: 165, startDate: '2016-07-07T00:00:00.000-0400', endDate: '2016-07-08T00:00:00.000-0400' },
]
```

Greg Wilson's avatar
Greg Wilson committed
625 626
___

Greg Wilson's avatar
Greg Wilson committed
627
#### **`saveWeight`**
Terrillo Walls's avatar
Terrillo Walls committed
628
save a numeric weight value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
629

Greg Wilson's avatar
Greg Wilson committed
630
`saveWeight` accepts an options object containing a numeric weight value:
Greg Wilson's avatar
Greg Wilson committed
631
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
632 633 634
let options = {
  value: 200
}
Greg Wilson's avatar
Greg Wilson committed
635
```
Terrillo Walls's avatar
Terrillo Walls committed
636

Greg Wilson's avatar
Greg Wilson committed
637
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
638 639 640
AppleHealthkit.saveWeight(options: Object, (err: Object, results: Object) => {
    if (err) {
        console.log("error saving weight to Healthkit: ", err);
Greg Wilson's avatar
Greg Wilson committed
641 642
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
643
    // Done
Greg Wilson's avatar
Greg Wilson committed
644 645
});
```
Greg Wilson's avatar
Greg Wilson committed
646

647 648 649
___

#### **`getLatestHeight`**
Greg Wilson's avatar
Greg Wilson committed
650 651
Get the most recent height value.

Greg Wilson's avatar
Greg Wilson committed
652
On success, the callback function will be provided with a `height` object containing the height `value`, and the `startDate` and `endDate` of the height sample. *Note: startDate and endDate will be the same as height samples are saved at a specific point in time.*
Greg Wilson's avatar
Greg Wilson committed
653 654

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
655 656
AppleHealthkit.getLatestHeight(null, (err: string, results: Object) => {
    if (err) {
657 658 659
        console.log("error getting latest height: ", err);
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
660
    console.log(results)
661 662
});
```
Greg Wilson's avatar
Greg Wilson committed
663

Terrillo Walls's avatar
Terrillo Walls committed
664 665 666 667 668 669 670 671
```javascript
{
	value: 72,
	startDate: '2016-07-08T12:00:00.000-0400',
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
672 673
___

Greg Wilson's avatar
Greg Wilson committed
674 675 676 677
#### **`getHeightSamples`**
query for height samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
678 679 680 681 682
  unit: 'inch', // optional; default 'inch'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false, // optional; default false
  limit:10, // optional; default no limit
Greg Wilson's avatar
Greg Wilson committed
683 684 685 686
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
687 688 689 690 691 692
AppleHealthkit.getHeightSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
});
Greg Wilson's avatar
Greg Wilson committed
693
```
Terrillo Walls's avatar
Terrillo Walls committed
694 695

The callback function will be called with a `samples` array containing objects with `value`, `startDate`, and `endDate` fields
Greg Wilson's avatar
Greg Wilson committed
696
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
697 698 699 700
[
	{ value: 74.02, startDate:'2016-06-29T17:55:00.000-0400', endDate:'2016-06-29T17:55:00.000-0400' },
	{ value: 74, startDate:'2016-03-12T13:22:00.000-0400', endDate:'2016-03-12T13:22:00.000-0400' },
]
Greg Wilson's avatar
Greg Wilson committed
701 702 703 704
```

___

Greg Wilson's avatar
Greg Wilson committed
705
#### **`saveHeight`**
Terrillo Walls's avatar
Terrillo Walls committed
706
save a numeric height value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
707 708 709

`saveHeight` accepts an options object containing a numeric height value:
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
710 711 712
let options = {
  value: 200
}
Greg Wilson's avatar
Greg Wilson committed
713
```
Terrillo Walls's avatar
Terrillo Walls committed
714

Greg Wilson's avatar
Greg Wilson committed
715
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
716 717 718 719 720
AppleHealthkit.saveHeight(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  // height successfully saved
Greg Wilson's avatar
Greg Wilson committed
721 722 723
});
```

Greg Wilson's avatar
Greg Wilson committed
724 725 726
___

#### **`getLatestBmi`**
727
Get the most recent BMI sample.
Greg Wilson's avatar
Greg Wilson committed
728

Greg Wilson's avatar
Greg Wilson committed
729
On success, the callback function will be provided with a `bmi` object containing the BMI `value`, and the `startDate` and `endDate` of the sample. *Note: startDate and endDate will be the same as bmi samples are saved at a specific point in time.*
Terrillo Walls's avatar
Terrillo Walls committed
730 731 732 733 734 735 736 737 738 739
```javascript
AppleHealthkit.getLatestBmi(null, (err: string, results: Object) => {
    if (err) {
        console.log("error getting latest bmi data: ", err);
        return;
    }
    console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
740 741 742
```javascript
{
	value: 27.2,
743
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
744 745 746 747
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

748 749
___

Greg Wilson's avatar
Greg Wilson committed
750
#### **`saveBmi`**
Terrillo Walls's avatar
Terrillo Walls committed
751
save a numeric BMI value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
752 753 754

`saveBmi` accepts an options object containing a numeric BMI value:
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
755 756 757
let options = {
  value: 27.2
}
Greg Wilson's avatar
Greg Wilson committed
758 759
```
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
760 761 762 763 764
AppleHealthkit.saveBmi(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  // BMI successfully saved
Greg Wilson's avatar
Greg Wilson committed
765 766 767 768 769
});
```

___

770
#### **`getLatestBodyFatPercentage`**
Greg Wilson's avatar
Greg Wilson committed
771 772
Get the most recent body fat percentage. The percentage value is a number between 0 and 100.

Greg Wilson's avatar
Greg Wilson committed
773
On success, the callback function will be provided with a `bodyFatPercentage` object containing the body fat percentage `value`, and the `startDate` and `endDate` of the sample. *Note: startDate and endDate will be the same as bodyFatPercentage samples are saved at a specific point in time.*
Terrillo Walls's avatar
Terrillo Walls committed
774 775 776 777 778 779 780 781 782 783

```javascript
AppleHealthkit.getLatestBodyFatPercentage(null, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
784 785 786
```javascript
{
	value: 20,
787
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
788 789 790 791
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
792 793 794
___

#### **`getLatestLeanBodyMass`**
Greg Wilson's avatar
Greg Wilson committed
795 796
Get the most recent lean body mass. The value is a number representing the weight in pounds (lbs)

Greg Wilson's avatar
Greg Wilson committed
797
On success, the callback function will be provided with a `leanBodyMass` object containing the leanBodyMass `value`, and the `startDate` and `endDate` of the sample. *Note: startDate and endDate will be the same as leanBodyMass samples are saved at a specific point in time.*
Terrillo Walls's avatar
Terrillo Walls committed
798 799 800 801 802 803 804 805 806 807

```javascript
 AppleHealthkit.getLatestLeanBodyMass(null, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
808 809 810
```javascript
{
	value: 176,
811
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
812 813 814 815
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Daniele Volpi's avatar
Daniele Volpi committed
816 817 818 819 820 821
___

#### **`getHeartRateSamples`**
query for heart rate samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
822 823 824 825 826
  unit: 'bpm', // optional; default 'bpm'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false, // optional; default false
  limit:10, // optional; default no limit
Daniele Volpi's avatar
Daniele Volpi committed
827 828 829 830 831
};
```

the callback function will be called with a `samples` array containing objects with *value*, *startDate*, and *endDate* fields
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
832 833 834 835 836
AppleHealthkit.getHeartRateSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
837 838 839
});
```

Terrillo Walls's avatar
Terrillo Walls committed
840 841 842 843 844 845 846
```javascript
[
	{ value: 74.02, startDate:'2016-06-29T17:55:00.000-0400', endDate:'2016-06-29T17:55:00.000-0400' },
	{ value: 74, startDate:'2016-03-12T13:22:00.000-0400', endDate:'2016-03-12T13:22:00.000-0400' },
]
```

Daniele Volpi's avatar
Daniele Volpi committed
847 848 849 850 851 852
___

#### **`getBodyTemperatureSamples`**
query for body temperature samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
853 854 855 856 857
  unit: 'celsius', // optional; default 'celsius'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false, // optional; default false
  limit:10,	// optional; default no limit
Daniele Volpi's avatar
Daniele Volpi committed
858 859 860 861 862 863 864
};
```
available units are: `'fahrenheit'`, `'celsius'`.

the callback function will be called with a `samples` array containing objects with *value*, *startDate*, and *endDate* fields.

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
865 866
AppleHealthkit.getBodyTemperatureSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
Daniele Volpi's avatar
Daniele Volpi committed
867 868
		return;
	}
Terrillo Walls's avatar
Terrillo Walls committed
869
	console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
870 871 872
});
```

Terrillo Walls's avatar
Terrillo Walls committed
873 874 875 876 877 878 879
```javascript
[
	{ value: 74.02, startDate:'2016-06-29T17:55:00.000-0400', endDate:'2016-06-29T17:55:00.000-0400' },
	{ value: 74, startDate:'2016-03-12T13:22:00.000-0400', endDate:'2016-03-12T13:22:00.000-0400' },
]
```

Daniele Volpi's avatar
Daniele Volpi committed
880 881 882 883 884 885
___

#### **`getBloodPressureSamples`**
query for blood pressure samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
886 887 888 889 890
  unit: 'mmhg',	// optional; default 'mmhg'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(),	// optional; default now
  ascending: false,	// optional; default false
  limit:10, // optional; default no limit
Daniele Volpi's avatar
Daniele Volpi committed
891 892 893 894
};
```

the callback function will be called with a `samples` array containing objects with *bloodPressureSystolicValue*, *bloodPressureDiastolicValue*, *startDate*, and *endDate* fields
Terrillo Walls's avatar
Terrillo Walls committed
895

Daniele Volpi's avatar
Daniele Volpi committed
896
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
897 898 899 900 901 902
AppleHealthkit.getBloodPressureSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
});
Daniele Volpi's avatar
Daniele Volpi committed
903
```
Terrillo Walls's avatar
Terrillo Walls committed
904

Daniele Volpi's avatar
Daniele Volpi committed
905
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
906 907 908 909
[
  { bloodPressureSystolicValue: 120, bloodPressureDiastolicValue: 81, startDate:'2016-06-29T17:55:00.000-0400', endDate:'2016-06-29T17:55:00.000-0400' },
  { bloodPressureSystolicValue: 119, bloodPressureDiastolicValue: 77, startDate:'2016-03-12T13:22:00.000-0400', endDate:'2016-03-12T13:22:00.000-0400' },
]
Daniele Volpi's avatar
Daniele Volpi committed
910 911
```

Terrillo Walls's avatar
Terrillo Walls committed
912

Daniele Volpi's avatar
Daniele Volpi committed
913 914 915 916 917 918
___

#### **`getRespiratoryRateSamples`**
query for respiratory rate samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
919 920 921 922 923
  unit: 'bpm', // optional; default 'bpm'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false, // optional; default false
  limit:10, // optional; default no limit
Daniele Volpi's avatar
Daniele Volpi committed
924 925 926 927 928 929
};
```

the callback function will be called with a `samples` array containing objects with *value*, *startDate*, and *endDate* fields

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
930 931 932 933 934
AppleHealthkit.getRespiratoryRateSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
935 936 937 938 939 940 941 942 943
});
```

___

#### **`getBloodGlucoseSamples`**
query for blood glucose samples. the options object is used to setup a query to retrieve relevant samples.
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
944 945 946 947 948
  unit: 'mmolPerL',	// optional; default 'mmolPerL'
  startDate: (new Date(2016,4,27)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  ascending: false, // optional; default false
  limit:10,	// optional; default no limit
Daniele Volpi's avatar
Daniele Volpi committed
949 950 951 952 953 954 955
};
```
available units are: `'mmolPerL'`, `'mgPerdL'`.

the callback function will be called with a `samples` array containing objects with *value*, *startDate*, and *endDate* fields

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
956 957 958 959 960
AppleHealthkit.getBloodGlucoseSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
961 962 963
});
```

964 965 966 967 968 969 970
___

#### **`getSleepSamples`**
query for sleep samples.

each sleep sample represents a period of time with a startDate and an endDate.
the sample's value will be either `INBED` or `ASLEEP`. these values should overlap,
Greg Wilson's avatar
Greg Wilson committed
971
meaning that two (or more) samples represent a single nights sleep activity. see
Terrillo Walls's avatar
Terrillo Walls committed
972
[Healthkit SleepAnalysis] reference documentation
973 974 975 976 977 978

the options object is used to setup a query to retrieve relevant samples.
the options must contain `startDate` and may also optionally include `endDate`
and `limit` options
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
979 980 981
  startDate: (new Date(2016,10,1)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  limit:10, // optional; default no limit
982 983 984
};
```

Terrillo Walls's avatar
Terrillo Walls committed
985
The callback function will be called with a `samples` array containing objects
986 987 988
with *value*, *startDate*, and *endDate* fields

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
989 990 991 992 993
AppleHealthkit.getSleepSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results).
994 995 996
});
```

skleest's avatar
skleest committed
997 998 999 1000 1001 1002 1003
#### **`saveMindfulSession`**

each mindfulness sample represents a period of time with a startDate and an endDate.
the options must contain `startDate` and `endDate`

```javascript
let options = {
1004 1005
    startDate: (new Date(2016,10,1)).toISOString(), // required
    endDate: (new Date()).toISOString(), // optional; default now
skleest's avatar
skleest committed
1006
};
skleest's avatar
skleest committed
1007

1008 1009 1010
```

```
skleest's avatar
minor  
skleest committed
1011
AppleHealthKit.saveMindfulSession(options, (err, res) => {
1012 1013 1014
  if (err) return {
    return
  }
skleest's avatar
skleest committed
1015 1016
  console.log('Mindful session saved')
});
skleest's avatar
skleest committed
1017
```
Daniele Volpi's avatar
Daniele Volpi committed
1018

Terrillo Walls's avatar
Terrillo Walls committed
1019
> *This package is fork from [react-native-apple-Healthkit](https://github.com/GregWilson/react-native-apple-Healthkit)*