README.md 36.9 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 52
- Run `npm install rn-apple-healthkit --save`
- Run `react-native link rn-apple-Healthkit`
Greg Wilson's avatar
Greg Wilson committed
53

Terrillo Walls's avatar
Terrillo Walls committed
54 55 56 57 58 59 60
Update `info.plist` in your React Native project
```
<key>NSHealthShareUsageDescription</key>
<string>Read and understand health data.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Share workout data with other apps.</string>
```
61

Terrillo Walls's avatar
Terrillo Walls committed
62
### Manual Installation
Greg Wilson's avatar
Greg Wilson committed
63

Terrillo Walls's avatar
Terrillo Walls committed
64 65 66 67 68 69 70 71
1. Run `npm install rn-apple-healthkit --save`
2. In XCode, in the project navigator, right click `Libraries``Add Files to [your project's name]`
3. Go to `node_modules``rn-apple-Healthkit` and add `RCTAppleHealthkit.xcodeproj`
4. In XCode, in the project navigator, select your project. Add `libRCTAppleHealthkit.a` to your project's `Build Phases``Link Binary With Libraries`
5. 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`.
6. Enable Healthkit in your application's `Capabilities`
![Alt text](/examples/images/Capabilities_Healthkit.png "Xcode Capabilities Section")
7. Compile and run
Greg Wilson's avatar
Greg Wilson committed
72

Greg Wilson's avatar
Greg Wilson committed
73
### Usage
Greg Wilson's avatar
Greg Wilson committed
74

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

Greg Wilson's avatar
Greg Wilson committed
77
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
78
import AppleHealthkit from 'rn-apple-Healthkit';
Greg Wilson's avatar
Greg Wilson committed
79

Greg Wilson's avatar
Greg Wilson committed
80
let options = {
Greg Wilson's avatar
Greg Wilson committed
81
    permissions: {
Greg Wilson's avatar
Greg Wilson committed
82 83
        read: ["Height", "Weight", "StepCount", "DateOfBirth", "BodyMassIndex"],
        write: ["Weight", "StepCount", "BodyMassIndex"]
Greg Wilson's avatar
Greg Wilson committed
84 85 86
    }
};

Terrillo Walls's avatar
Terrillo Walls committed
87 88 89
AppleHealthkit.initHealthkit(options: Object, (err: Object, results: Object) => {
    if (err) {
        console.log("error initializing Healthkit: ", err);
Greg Wilson's avatar
Greg Wilson committed
90 91
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
92
    // Healthkit initialized...
Greg Wilson's avatar
Greg Wilson committed
93 94 95 96 97
});


```

Terrillo Walls's avatar
Terrillo Walls committed
98
When the module has been successfully initialized you can read and write Healthkit data
Greg Wilson's avatar
Greg Wilson committed
99 100

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

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

Terrillo Walls's avatar
Terrillo Walls committed
105
  ...
Greg Wilson's avatar
Greg Wilson committed
106

Terrillo Walls's avatar
Terrillo Walls committed
107
  AppleHealthkit.getLatestWeight(null, (err: Object, weight: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
108 109 110 111
      if(err){
          console.log("error getting current weight: ", err);
          return;
      }
Terrillo Walls's avatar
Terrillo Walls committed
112
      // use weight.value
Terrillo Walls's avatar
Terrillo Walls committed
113 114 115 116
  });

  ...

Terrillo Walls's avatar
Terrillo Walls committed
117 118 119 120
  let options = {
    value: 200
  };
  AppleHealthkit.saveWeight(options: Object, (err: Object, results: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
121
      if (err) {
Terrillo Walls's avatar
Terrillo Walls committed
122
          console.log("error saving weight to Healthkit: ", err);
Terrillo Walls's avatar
Terrillo Walls committed
123 124 125 126 127 128
          return;
      }
      // weight successfully saved
  });

}
Greg Wilson's avatar
Greg Wilson committed
129 130 131


```
Greg Wilson's avatar
Greg Wilson committed
132 133


Greg Wilson's avatar
Greg Wilson committed
134 135
## Documentation

Terrillo Walls's avatar
Terrillo Walls committed
136
### Permissions
Greg Wilson's avatar
Greg Wilson committed
137

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

Terrillo Walls's avatar
Terrillo Walls committed
140
| Permission             | Healthkit Identifier Type                                                                                                                                      | Read | Write |
Greg Wilson's avatar
Greg Wilson committed
141
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|------|-------|
142
<<<<<<< HEAD
Terrillo Walls's avatar
Terrillo Walls committed
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
| 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
166 167


Terrillo Walls's avatar
Terrillo Walls committed
168
## Methods
169
=======
Greg Wilson's avatar
Greg Wilson committed
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
| 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
186 187 188 189 190
| 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)               | ✓    |       |
191 192 193
| 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
194 195
| MindfulSession         | [HKCategoryTypeIdentifierMindfulSession](https://developer.apple.com/reference/healthkit/hkcategorytypeidentifiermindfulsession?language=objc)                 |      |  ✓    |

Daniele Volpi's avatar
Daniele Volpi committed
196

Greg Wilson's avatar
Greg Wilson committed
197

Greg Wilson's avatar
Greg Wilson committed
198 199 200 201 202 203 204 205 206 207
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
208
// setup healthkit read/write permissions using PERMS
Greg Wilson's avatar
Greg Wilson committed
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
const healthKitOptions = {
    permissions: {
        read:  [
            PERMS.StepCount,
            PERMS.Height,
        ],
        write: [
            PERMS.StepCount
        ],
    }
};

...
```

Greg Wilson's avatar
Greg Wilson committed
224

Greg Wilson's avatar
Greg Wilson committed
225 226
Options
-------
Greg Wilson's avatar
Greg Wilson committed
227 228


Greg Wilson's avatar
Greg Wilson committed
229 230
Methods
-------
231
>>>>>>> 5adade4a95b5b3cd1816a8d203c1e36a702cfa8a
Greg Wilson's avatar
Greg Wilson committed
232

233
#### **`isAvailable`**
Terrillo Walls's avatar
Terrillo Walls committed
234
Check if Healthkit is available on the device.
Greg Wilson's avatar
Greg Wilson committed
235
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
236
import AppleHealthkit from 'rn-apple-Healthkit';
Terrillo Walls's avatar
Terrillo Walls committed
237

Terrillo Walls's avatar
Terrillo Walls committed
238 239
AppleHealthkit.isAvailable((err: Object, available: boolean) => {
    if (available) {
Greg Wilson's avatar
Greg Wilson committed
240 241 242 243
        // ...
    }
});
```
Greg Wilson's avatar
Greg Wilson committed
244
___
Greg Wilson's avatar
Greg Wilson committed
245

Terrillo Walls's avatar
Terrillo Walls committed
246 247
#### **`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
248

249
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
250

Terrillo Walls's avatar
Terrillo Walls committed
251
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
252

Terrillo Walls's avatar
Terrillo Walls committed
253
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
254

Terrillo Walls's avatar
Terrillo Walls committed
255
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
256

Terrillo Walls's avatar
Terrillo Walls committed
257
`initHealthkit` requires an options object with Healthkit permission settings
Greg Wilson's avatar
Greg Wilson committed
258
```javascript
Greg Wilson's avatar
Greg Wilson committed
259
let options = {
Greg Wilson's avatar
Greg Wilson committed
260
    permissions: {
Greg Wilson's avatar
Greg Wilson committed
261 262
        read: ["Height", "Weight", "StepCount", "DateOfBirth", "BodyMassIndex"],
        write: ["Weight", "StepCount", "BodyMassIndex"]
Greg Wilson's avatar
Greg Wilson committed
263 264
    }
};
Greg Wilson's avatar
Greg Wilson committed
265
```
Greg Wilson's avatar
Greg Wilson committed
266

Greg Wilson's avatar
Greg Wilson committed
267
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
268
AppleHealthkit.initHealthkit(options: Object, (err: string, results: Object) => {
Terrillo Walls's avatar
Terrillo Walls committed
269
    if (err) {
Terrillo Walls's avatar
Terrillo Walls committed
270
        console.log("error initializing Healthkit: ", err);
Greg Wilson's avatar
Greg Wilson committed
271 272
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
273 274
    // Healthkit is initialized...
    // now safe to read and write Healthkit data...
Greg Wilson's avatar
Greg Wilson committed
275 276 277
});
```

Greg Wilson's avatar
Greg Wilson committed
278 279
___

Greg Wilson's avatar
Greg Wilson committed
280
#### **`getBiologicalSex`**
Greg Wilson's avatar
Greg Wilson committed
281
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
282

Greg Wilson's avatar
Greg Wilson committed
283 284 285 286 287 288 289 290
| Value   | HKBiologicalSex       |
|---------|-----------------------|
| unknown | HKBiologicalSexNotSet |
| male    | HKBiologicalSexMale   |
| female  | HKBiologicalSexFemale |
| other   | HKBiologicalSexOther  |

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
291 292 293
AppleHealthkit.getBiologicalSex(null, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getBiologicalSex')) {
      return;
Greg Wilson's avatar
Greg Wilson committed
294
    }
Terrillo Walls's avatar
Terrillo Walls committed
295
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
296 297 298
});
```

Terrillo Walls's avatar
Terrillo Walls committed
299 300 301 302 303 304
```javascript
{
	value: 'female',
}
```

Greg Wilson's avatar
Greg Wilson committed
305 306
___

Greg Wilson's avatar
Greg Wilson committed
307
#### **`getDateOfBirth`**
308
Get the date of birth.
Greg Wilson's avatar
Greg Wilson committed
309

Greg Wilson's avatar
Greg Wilson committed
310
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
311 312 313 314 315 316 317 318 319
```javascript
AppleHealthkit.getDateOfBirth(null, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getDateOfBirth')) {
        return;
    }
    console.log(results)
});
```

Greg Wilson's avatar
Greg Wilson committed
320
```javascript
321 322 323
{
	value: '1986-09-01T00:00:00.000-0400',
	age: 29
324 325 326
}
```

Greg Wilson's avatar
Greg Wilson committed
327 328
___

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

332
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
333
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
334
let d = new Date(2016,1,1);
Greg Wilson's avatar
Greg Wilson committed
335 336 337 338 339
let options = {
    date: d.toISOString()
};
```

Greg Wilson's avatar
Greg Wilson committed
340
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
341 342
AppleHealthkit.getStepCount(options: Object, (err: Object, results: Object) => {
    if (this._handleHealthkitError(err, 'getStepCount')) {
Greg Wilson's avatar
Greg Wilson committed
343 344
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
345
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
346 347 348
});
```

Terrillo Walls's avatar
Terrillo Walls committed
349 350 351 352 353 354
```javascript
{
	value: 213,
}
```

Greg Wilson's avatar
Greg Wilson committed
355 356
___

Greg Wilson's avatar
Greg Wilson committed
357
#### **`getDailyStepCountSamples`**
358
Get the total steps per day over a specified date range.
Greg Wilson's avatar
Greg Wilson committed
359

Greg Wilson's avatar
Greg Wilson committed
360
`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
361 362
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
363 364
    startDate: (new Date(2016,1,1)).toISOString() // required
    endDate:   (new Date()).toISOString() // optional; default now
Greg Wilson's avatar
Greg Wilson committed
365 366
};
```
Terrillo Walls's avatar
Terrillo Walls committed
367 368 369 370 371 372 373 374 375 376

```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
377
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
378
```javascript
379
[
Greg Wilson's avatar
Greg Wilson committed
380 381 382 383 384 385
  { 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
386 387
___

388 389 390
#### **`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
391
Healthkit step count has changed.
Greg Wilson's avatar
Greg Wilson committed
392

393 394 395 396 397
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
398 399
The `initStepCountObserver` method should be called after Healthkit has been
successfully initialized (AppleHealthkit.initHealthkit has been called without
400
error).
401 402

```javascript
403 404 405 406 407 408
// import NativeAppEventEmitter from react-native
import {
  Navigator,
  View,
  NativeAppEventEmitter,
} from 'react-native';
Terrillo Walls's avatar
Terrillo Walls committed
409
```
410 411


Terrillo Walls's avatar
Terrillo Walls committed
412 413 414
```javascript
AppleHealthkit.initHealthkit(HKOPTIONS, (err, res) => {
  if (this._handleHKError(err, 'initHealthkit')) {
415 416 417 418
    return;
  }

  // initialize the step count observer
Terrillo Walls's avatar
Terrillo Walls committed
419
  AppleHealthkit.initStepCountObserver({}, () => {});
420 421 422 423 424 425 426 427 428 429 430 431 432

  // 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
433
      // count data should be re-fetched from Healthkit.
434
      this._fetchStepCountData();
435
    }
436
  );
Greg Wilson's avatar
Greg Wilson committed
437

Terrillo Walls's avatar
Terrillo Walls committed
438 439
  // other tasks to perform after Healthkit has been
  // initialized (fetch relevant Healthkit data).
Greg Wilson's avatar
Greg Wilson committed
440
  this._fetchStepCountData();
Terrillo Walls's avatar
Terrillo Walls committed
441
  this._fetchOtherRelevantHealthkitData();
Greg Wilson's avatar
Greg Wilson committed
442
  // ...
443
});
444 445 446 447 448

...

// 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
449
// 'remove' method of the subscription object.
450 451 452
componentWillUnmount() {
  this.sub.remove();
}
453 454 455 456
```

___

Greg Wilson's avatar
Greg Wilson committed
457
#### **`saveSteps`**
Greg Wilson's avatar
Greg Wilson committed
458
Save a step count sample.
Greg Wilson's avatar
Greg Wilson committed
459

Greg Wilson's avatar
Greg Wilson committed
460
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
461 462 463

`saveSteps` accepts an options object containing required *`value: number`*, *`startDate: ISO8601Timestamp`*, and *`endDate: ISO8601Timestamp`*.
```javascript
464
// startDate and endDate are 30 minutes apart.
Terrillo Walls's avatar
Terrillo Walls committed
465
// this means the step count value occurred within those 30 minutes.
Greg Wilson's avatar
Greg Wilson committed
466
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
467 468 469
  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
470 471 472 473
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
474 475 476 477 478
AppleHealthkit.saveSteps(options, (err, res) => {
  if (this._handleHKError(err, 'saveSteps')) {
    return;
  }
  // step count sample successfully saved
Greg Wilson's avatar
Greg Wilson committed
479 480 481 482 483
});
```

___

Greg Wilson's avatar
Greg Wilson committed
484
#### **`getDistanceWalkingRunning`**
485
Get the total distance walking/running on a specific day.
Greg Wilson's avatar
Greg Wilson committed
486

Greg Wilson's avatar
Greg Wilson committed
487
`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`.
488

Greg Wilson's avatar
Greg Wilson committed
489 490
```javascript
let options = {
491 492
  unit: 'mile', // optional; default 'meter'
  date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
493
};
Terrillo Walls's avatar
Terrillo Walls committed
494
```
Greg Wilson's avatar
Greg Wilson committed
495

Terrillo Walls's avatar
Terrillo Walls committed
496 497 498
```javascript
AppleHealthkit.getDistanceWalkingRunning(options: Object, (err: Object, results: Object) => {
    if (this._handleHKError(err, 'getDistanceWalkingRunning')) {
Greg Wilson's avatar
Greg Wilson committed
499 500
    	return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
501
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
502 503 504
});
```

505 506
```javascript
{
Terrillo Walls's avatar
Terrillo Walls committed
507
	value: 1.45,
508 509 510 511 512
	startDate: '2016-07-08T12:00:00.000-0400',
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
513 514 515
___

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

Greg Wilson's avatar
Greg Wilson committed
518
`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
519 520
```javascript
let options = {
Terrillo Walls's avatar
Terrillo Walls committed
521 522
  unit: 'mile', // optional; default 'meter'
  date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
523 524 525 526
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
527 528
AppleHealthkit.getDistanceCycling(options: Object, (err: Object, results: Object) => {
    if (err) {
Greg Wilson's avatar
Greg Wilson committed
529 530
    	return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
531
    console.log(results)
Greg Wilson's avatar
Greg Wilson committed
532 533 534
});
```

Terrillo Walls's avatar
Terrillo Walls committed
535 536 537 538 539 540 541 542
```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
543 544 545
___

#### **`getFlightsClimbed`**
546
get the total flights climbed (1 flight is ~10ft of elevation) on a specific day.
Greg Wilson's avatar
Greg Wilson committed
547 548 549 550

`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
551
    date: (new Date(2016,5,1)).toISOString(), // optional; default now
Greg Wilson's avatar
Greg Wilson committed
552 553 554 555
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
556 557 558 559 560
AppleHealthkit.getFlightsClimbed(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  console.log(results)
Greg Wilson's avatar
Greg Wilson committed
561 562 563
});
```

Terrillo Walls's avatar
Terrillo Walls committed
564 565 566 567 568 569 570 571
```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
572 573
___

574
#### **`getLatestWeight`**
Greg Wilson's avatar
Greg Wilson committed
575 576
Get the most recent weight sample.

Greg Wilson's avatar
Greg Wilson committed
577
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
578 579

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
580 581 582 583
let options = {
  unit: 'pound'
};
```
Terrillo Walls's avatar
Terrillo Walls committed
584

Terrillo Walls's avatar
Terrillo Walls committed
585 586 587 588 589 590 591
```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
592 593 594
});
```

Greg Wilson's avatar
Greg Wilson committed
595 596 597
```javascript
{
	value: 200,
598
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
599 600 601 602
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
603 604
___

Greg Wilson's avatar
Greg Wilson committed
605 606 607 608
#### **`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
609 610 611 612 613
  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
614 615 616 617
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
618 619 620 621 622
AppleHealthkit.getWeightSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Greg Wilson's avatar
Greg Wilson committed
623 624 625
});
```

Terrillo Walls's avatar
Terrillo Walls committed
626 627 628 629 630 631 632 633
```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
634 635
___

Greg Wilson's avatar
Greg Wilson committed
636
#### **`saveWeight`**
Terrillo Walls's avatar
Terrillo Walls committed
637
save a numeric weight value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
638

Greg Wilson's avatar
Greg Wilson committed
639
`saveWeight` accepts an options object containing a numeric weight value:
Greg Wilson's avatar
Greg Wilson committed
640
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
641 642 643
let options = {
  value: 200
}
Greg Wilson's avatar
Greg Wilson committed
644
```
Terrillo Walls's avatar
Terrillo Walls committed
645

Greg Wilson's avatar
Greg Wilson committed
646
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
647 648 649
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
650 651
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
652
    // Done
Greg Wilson's avatar
Greg Wilson committed
653 654
});
```
Greg Wilson's avatar
Greg Wilson committed
655

656 657 658
___

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

Greg Wilson's avatar
Greg Wilson committed
661
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
662 663

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
664 665
AppleHealthkit.getLatestHeight(null, (err: string, results: Object) => {
    if (err) {
666 667 668
        console.log("error getting latest height: ", err);
        return;
    }
Terrillo Walls's avatar
Terrillo Walls committed
669
    console.log(results)
670 671
});
```
Greg Wilson's avatar
Greg Wilson committed
672

Terrillo Walls's avatar
Terrillo Walls committed
673 674 675 676 677 678 679 680
```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
681 682
___

Greg Wilson's avatar
Greg Wilson committed
683 684 685 686
#### **`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
687 688 689 690 691
  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
692 693 694 695
};
```

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
696 697 698 699 700 701
AppleHealthkit.getHeightSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
});
Greg Wilson's avatar
Greg Wilson committed
702
```
Terrillo Walls's avatar
Terrillo Walls committed
703 704

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
705
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
706 707 708 709
[
	{ 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
710 711 712 713
```

___

Greg Wilson's avatar
Greg Wilson committed
714
#### **`saveHeight`**
Terrillo Walls's avatar
Terrillo Walls committed
715
save a numeric height value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
716 717 718

`saveHeight` accepts an options object containing a numeric height value:
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
719 720 721
let options = {
  value: 200
}
Greg Wilson's avatar
Greg Wilson committed
722
```
Terrillo Walls's avatar
Terrillo Walls committed
723

Greg Wilson's avatar
Greg Wilson committed
724
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
725 726 727 728 729
AppleHealthkit.saveHeight(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  // height successfully saved
Greg Wilson's avatar
Greg Wilson committed
730 731 732
});
```

Greg Wilson's avatar
Greg Wilson committed
733 734 735
___

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

Greg Wilson's avatar
Greg Wilson committed
738
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
739 740 741 742 743 744 745 746 747 748
```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
749 750 751
```javascript
{
	value: 27.2,
752
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
753 754 755 756
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

757 758
___

Greg Wilson's avatar
Greg Wilson committed
759
#### **`saveBmi`**
Terrillo Walls's avatar
Terrillo Walls committed
760
save a numeric BMI value to Healthkit
Greg Wilson's avatar
Greg Wilson committed
761 762 763

`saveBmi` accepts an options object containing a numeric BMI value:
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
764 765 766
let options = {
  value: 27.2
}
Greg Wilson's avatar
Greg Wilson committed
767 768
```
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
769 770 771 772 773
AppleHealthkit.saveBmi(options: Object, (err: Object, results: Object) => {
  if (err) {
    return;
  }
  // BMI successfully saved
Greg Wilson's avatar
Greg Wilson committed
774 775 776 777 778
});
```

___

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

Greg Wilson's avatar
Greg Wilson committed
782
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
783 784 785 786 787 788 789 790 791 792

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

Greg Wilson's avatar
Greg Wilson committed
793 794 795
```javascript
{
	value: 20,
796
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
797 798 799 800
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Greg Wilson's avatar
Greg Wilson committed
801 802 803
___

#### **`getLatestLeanBodyMass`**
Greg Wilson's avatar
Greg Wilson committed
804 805
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
806
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
807 808 809 810 811 812 813 814 815 816

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

Greg Wilson's avatar
Greg Wilson committed
817 818 819
```javascript
{
	value: 176,
820
	startDate: '2016-07-08T12:00:00.000-0400',
Greg Wilson's avatar
Greg Wilson committed
821 822 823 824
	endDate: '2016-07-08T12:00:00.000-0400'
}
```

Daniele Volpi's avatar
Daniele Volpi committed
825 826 827 828 829 830
___

#### **`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
831 832 833 834 835
  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
836 837 838 839 840
};
```

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
841 842 843 844 845
AppleHealthkit.getHeartRateSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
846 847 848
});
```

Terrillo Walls's avatar
Terrillo Walls committed
849 850 851 852 853 854 855
```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
856 857 858 859 860 861
___

#### **`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
862 863 864 865 866
  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
867 868 869 870 871 872 873
};
```
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
874 875
AppleHealthkit.getBodyTemperatureSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
Daniele Volpi's avatar
Daniele Volpi committed
876 877
		return;
	}
Terrillo Walls's avatar
Terrillo Walls committed
878
	console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
879 880 881
});
```

Terrillo Walls's avatar
Terrillo Walls committed
882 883 884 885 886 887 888
```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
889 890 891 892 893 894
___

#### **`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
895 896 897 898 899
  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
900 901 902 903
};
```

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
904

Daniele Volpi's avatar
Daniele Volpi committed
905
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
906 907 908 909 910 911
AppleHealthkit.getBloodPressureSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
});
Daniele Volpi's avatar
Daniele Volpi committed
912
```
Terrillo Walls's avatar
Terrillo Walls committed
913

Daniele Volpi's avatar
Daniele Volpi committed
914
```javascript
Terrillo Walls's avatar
Terrillo Walls committed
915 916 917 918
[
  { 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
919 920
```

Terrillo Walls's avatar
Terrillo Walls committed
921

Daniele Volpi's avatar
Daniele Volpi committed
922 923 924 925 926 927
___

#### **`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
928 929 930 931 932
  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
933 934 935 936 937 938
};
```

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
939 940 941 942 943
AppleHealthkit.getRespiratoryRateSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
944 945 946 947 948 949 950 951 952
});
```

___

#### **`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
953 954 955 956 957
  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
958 959 960 961 962 963 964
};
```
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
965 966 967 968 969
AppleHealthkit.getBloodGlucoseSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results)
Daniele Volpi's avatar
Daniele Volpi committed
970 971 972
});
```

973 974 975 976 977 978 979
___

#### **`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
980
meaning that two (or more) samples represent a single nights sleep activity. see
Terrillo Walls's avatar
Terrillo Walls committed
981
[Healthkit SleepAnalysis] reference documentation
982 983 984 985 986 987

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
988 989 990
  startDate: (new Date(2016,10,1)).toISOString(), // required
  endDate: (new Date()).toISOString(), // optional; default now
  limit:10, // optional; default no limit
991 992 993
};
```

Terrillo Walls's avatar
Terrillo Walls committed
994
The callback function will be called with a `samples` array containing objects
995 996 997
with *value*, *startDate*, and *endDate* fields

```javascript
Terrillo Walls's avatar
Terrillo Walls committed
998 999 1000 1001 1002
AppleHealthkit.getSleepSamples(options, (err: Object, results: Array<Object>) => {
  if (err) {
    return;
  }
  console.log(results).
1003 1004 1005
});
```

skleest's avatar
skleest committed
1006 1007 1008 1009 1010 1011 1012
#### **`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 = {
1013 1014
    startDate: (new Date(2016,10,1)).toISOString(), // required
    endDate: (new Date()).toISOString(), // optional; default now
skleest's avatar
skleest committed
1015
};
skleest's avatar
skleest committed
1016

1017 1018 1019
```

```
skleest's avatar
minor  
skleest committed
1020
AppleHealthKit.saveMindfulSession(options, (err, res) => {
1021 1022 1023
  if (err) return {
    return
  }
skleest's avatar
skleest committed
1024 1025
  console.log('Mindful session saved')
});
skleest's avatar
skleest committed
1026
```
Daniele Volpi's avatar
Daniele Volpi committed
1027

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