Package Exports
- react-native-apple-healthkit
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-apple-healthkit) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-native-apple-healthkit
A React Native bridge module for interacting with Apple HealthKit data.
![]()
Notice
This package is undergoing rapid development and should be considered unstable for the time being. Use at your own risk
Table of Contents
Getting started
Installation
Install the package from npm:
npm install react-native-apple-healthkit --save
Xcode
- In XCode, in the project navigator, right click
Libraries➜Add Files to [your project's name] - Go to
node_modules➜react-native-apple-healthkitand addRCTAppleHealthKit.xcodeproj - In XCode, in the project navigator, select your project. Add
libRCTAppleHealthKit.ato your project'sBuild Phases➜Link Binary With Libraries - Click
RCTAppleHealthKit.xcodeprojin the project navigator and go theBuild Settingstab. Make sure 'All' is toggled on (instead of 'Basic'). In theSearch Pathssection, look forHeader Search Pathsand make sure it contains both$(SRCROOT)/../../react-native/Reactand$(SRCROOT)/../../../React- mark both asrecursive. - Compile and run
Usage
Just require the react-native-apple-healthkit module and you're ready to go!
var AppleHealthKit = require('react-native-apple-healthkit');
...
let healthKitOptions = {
permissions: {
read: ["Height", "Weight", "Steps", "DateOfBirth", "BodyMassIndex"],
write: ["Weight", "Steps", "BodyMassIndex"]
}
};
AppleHealthKit.initHealthKit(healthKitOptions, (err, res) => {
if(err) {
console.log("error initializing healthkit: ", err);
return;
}
console.log("HEALTHKIT INITIALIZED!");
// ...
});
When the module has been successfully initialized you can read and write HealthKit data
var AppleHealthKit = require('react-native-apple-healthkit');
var _ = require('lodash');
...
AppleHealthKit.getLatestWeight(null, (err, weight) => {
if(err){
console.log("error getting current weight: ", err);
return;
}
weight = _.round(weight,1);
// do something with the weight...
});
...
let myWeight = 200;
AppleHealthKit.saveWeight({value:myWeight}, (err, res) => {
if(err){
console.log("error saving weight to healthkit: ", err);
return;
}
// weight successfully saved
});
Documentation
Permissions
The available HealthKit permissions to use with initHealthKit
Read Permissions:
Height HKQuantityTypeIdentifierHeight
Weight HKQuantityTypeIdentifierBodyMass
BodyFatPercentage HKQuantityTypeIdentifierBodyFatPercentage
BodyMassIndex HKQuantityTypeIdentifierBodyMassIndex
LeanBodyMass HKQuantityTypeIdentifierLeanBodyMass
Steps HKQuantityTypeIdentifierStepCount
BiologicalSex HKCharacteristicTypeIdentifierBiologicalSex
DateOfBirth HKCharacteristicTypeIdentifierDateOfBirth
DietaryEnergy HKQuantityTypeIdentifierDietaryEnergyConsumed
ActiveEnergy HKQuantityTypeIdentifierActiveEnergyBurnedWrite Permissions:
Height HKQuantityTypeIdentifierHeight
Weight HKQuantityTypeIdentifierBodyMass
BodyFatPercentage HKQuantityTypeIdentifierBodyFatPercentage
BodyMassIndex HKQuantityTypeIdentifierBodyMassIndex
LeanBodyMass HKQuantityTypeIdentifierLeanBodyMass
Steps HKQuantityTypeIdentifierStepCount
DietaryEnergy HKQuantityTypeIdentifierDietaryEnergyConsumed
ActiveEnergy HKQuantityTypeIdentifierActiveEnergyBurned
Methods
isAvailable
check if HealthKit is available on the device
AppleHealthKit.isAvailable((err: string, available: bool) => {
if(available){
// ...
}
});initHealthKit
initialize HealthKit. this will show the HealthKit permissions prompt for any read/write permissions that have not yet been selected by the user.
initHealthKit requires an options object with HealthKit permission settings.
let healthKitOptions = {
permissions: {
read: ["Height", "Weight", "Steps", "DateOfBirth", "BodyMassIndex"],
write: ["Weight", "Steps", "BodyMassIndex"]
}
};AppleHealthKit.initHealthKit(healthKitOptions: object, (err: string, res: object) => {
if(err) {
console.log("error initializing healthkit: ", err);
return;
}
// healthkit is initialized...
// now safe to read and write healthkit data...
});getStepCountForToday
get the the aggregated total steps for the current day starting and ending at midnight
AppleHealthKit.getStepCountForToday(null, (err: Object, steps: number) => {
if(this._handleHealthKitError(err, 'getStepCountForToday')){
return;
}
// use steps...
});getStepCountForDay
get the the aggregated total steps for the day provided as date in options object. the date field expects an ISO date string as its value
let d = new Date(2016,5,27);
let options = {
date: d.toISOString()
};
AppleHealthKit.getStepCountForDay(options, (err, steps) => {
if(this._handleHealthKitError(err, 'getStepCountForDay')){
return;
}
// steps is the step count for day 'd'
});getLatestWeight
get the most recent weight value
AppleHealthKit.getLatestWeight(null, (err: string, weight: number) => {
if(err){
console.log("error getting latest weight: ", err);
return;
}
weight = _.round(weight,1);
// use weight ...
});saveWeight
save a numeric weight value to HealthKit
saveWeight accepts an options object containing a numeric weight value:
let options = {value: 200}AppleHealthKit.saveWeight(options, (err, res) => {
if(err){
console.log("error saving weight to healthkit: ", err);
return;
}
// weight successfully saved
});getLatestHeight
get the most recent height value
AppleHealthKit.getLatestHeight(null, (err: string, height: number) => {
if(err){
console.log("error getting latest height: ", err);
return;
}
// use height ...
});saveHeight
save a numeric height value to HealthKit
saveHeight accepts an options object containing a numeric height value:
let options = {value: 200}AppleHealthKit.saveHeight(options, (err, res) => {
if(this._handleHealthKitError(err, 'saveHeight')){
return;
}
// height successfully saved
});getLatestBmi
get the most recent BMI data. the handler function will be called with a bmi object containing value: number, startDate: ISO8601Timestamp, and endDate: ISO8601Timestamp. The BMI value may be very old so the sample dates are provided as well. should apply this to all other RCT types
AppleHealthKit.getLatestBmi(null, (err: string, bmi: Object) => {
if(err){
console.log("error getting latest bmi data: ", err);
return;
}
if(bmi && bmi.value){
let d = bmi.startDate
let val = bmi.value;
// ...
}
});saveBmi
save a numeric BMI value to HealthKit
saveBmi accepts an options object containing a numeric BMI value:
let options = {value: 27.2}AppleHealthKit.saveBmi(options, (err, res) => {
if(this._handleHealthKitError(err, 'saveBmi')){
return;
}
// BMI successfully saved
});getLatestBodyFatPercentage
get the most recent body fat percentage. the percentage value is a number between 0 and 100
AppleHealthKit.getLatestBodyFatPercentage(null, (err: Object, bodyFatPercentage: number) => {
if(this._handleHealthKitError(err, 'getLatestBodyFatPercentage')){
return;
}
// use bodyFatPercentage ...
});getLatestLeanBodyMass
get the most recent lean body mass. the value is a number representing the weight in pounds (lbs)
AppleHealthKit.getLatestLeanBodyMass(null, (err: Object, leanBodyMass: number) => {
if(this._handleHealthKitError(err, 'getLatestLeanBodyMass')){
return;
}
// use leanBodyMass ...
});