Package Exports
- @barnstable/react-native-fitness
 - @barnstable/react-native-fitness/js/index.js
 
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 (@barnstable/react-native-fitness) 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-fitness
react-native-fitness is a library that works on both iOS and Android with it you can interact with Apple Healthkit and Google Fit.
Currently the lib provides a set of API that you can use to read steps count or distance count for a given period of time.
Note: We're open to receive PRs that contains new features or improvements, so feel free to contribute to this repo.
Getting started
npm install @ovalmoney/react-native-fitness --save
or
yarn add @ovalmoney/react-native-fitness
Mostly automatic installation
react-native link @ovalmoney/react-native-fitness
Manual installation
iOS
Pods
- Add the line below to your 
Podfile.pod 'react-native-fitness', :path => '../node_modules/@ovalmoney/react-native-fitness'` - Run 
pod installin your iOS project directory. - In XCode, select your project, go to 
Build Phases➜Link Binary With Librariesand addlibreact-native-fitness.a. - Add following to your 
Info.plistin order to ask permissions.<key>NSHealthShareUsageDescription</key> <string>Read and understand health data.</string>
 
Manually
- In XCode's project navigator, right click 
Libraries➜Add Files to [your project's name] - Go to 
node_modules➜@ovalmoney➜react-native-fitnessand selectRNFitness.xcodeproj - In XCode select your project, go to 
Build Phases➜Link Binary With Librariesand addlibRNFitness.a. - Run your project (
Cmd+R) 
In order to make it run, it is necessary to turn on Health Kit in the Capabilities.
Android
- Get an OAuth 2.0 Client ID as explained at https://developers.google.com/fit/android/get-api-key
 - Open up 
MainApplication.java- Add 
import com.ovalmoney.fitness.RNFitnessPackage;to the imports at the top of the file - Add 
new RNFitnessPackage()to the list returned by thegetPackages()method 
 - Add 
 - Append the following lines to 
android/settings.gradle:include ':@ovalmoney_react-native-fitness' project(':@ovalmoney_react-native-fitness').projectDir = new File(rootProject.projectDir, '../node_modules/@ovalmoney/react-native-fitness/android') - Insert the following lines inside the dependencies block in 
android/app/build.gradle:compile project(':@ovalmoney_react-native-fitness') - (Optional) In order to better handle the right versions, add in your 
android/build.gradle:// Other build versions fitnessPlayServices: "<Your version>" // default: 17.0.0 authPlayServices: "<Your version>" // default: 17.0.0 } 
Usage
import Fitness from '@ovalmoney/react-native-fitness';
const permissions = [
  { kind: Fitness.PermissionKinds.Steps, access: Fitness.PermissionAccesses.Write },
];
Fitness.isAuthorized(permissions)
  .then((authorized) => {
    // Do something
  })
  .catch((error) => {
    // Do something
  });API
Fitness.isAuthorized([{ kind: int, access: int }]) Check if permissions are granted or not. It works on Android and iOS >= 12.0, while it returns an error when iOS < 12. It requires an
ArrayofObjectwith a mandatory keykindand an optional keyaccess. Possible values for the keys can be found inPermissionKindsandPermissionAccessesunderAttributessection. On iOS at least one permissions withReadaccess must be provided, otherwise anerrorEmptyPermissionswill be thrown.Fitness.requestPermissions([{ kind: int, access: int }]) Ask permission and return if user granted or not(Android), while, due to Apple's privacy model, always true is returned in iOS. It requires an
ArrayofObjectwith a mandatory keykindand an optional keyaccess. Possible values for the keys can be found inPermissionKindsandPermissionAccessesunderAttributessection. On iOS at least one permissions withReadaccess must be provided, otherwise anerrorEmptyPermissionswill be thrown.Fitness.logout() Available only on android. It performs a logout from google account. It returns
truefor a successful logout,falseif user cancel action.Fitness.disconnect() Available only on android. It performs a disconnect action from Google Fit. It returns
truefor a successful logout,falseif user cancel action.Fitness.getSteps({ startDate: string, endDate: string, interval: string }) Fetch steps on a given period of time. It requires an
ObjectwithstartDateandendDateattributes as string. If startDate is not provided an error will be thrown. Setintervalto decide how detailed the returned data is, set it tohourorminuteotherwise it defaults todays.Fitness.getDistances({ startDate: string, endDate: string, interval: string }) Fetch distance in meters on a given period of time. It requires an
ObjectwithstartDateandendDateattributes as string. If startDate is not provided an error will be thrown. Setintervalto decide how detailed the returned data is, set it tohourorminuteotherwise it defaults todays.Fitness.getCalories({ startDate: string, endDate: string, interval: string }) Fetch calories burnt in kilocalories on a given period of time. It requires an
ObjectwithstartDateandendDateattributes as string. If startDate is not provided an error will be thrown. Setintervalto decide how detailed the returned data is, set it tohourorminuteotherwise it defaults todays.Fitness.getHeartRate({ startDate: string, endDate: string, interval: string }) Fetch heart rate bpm on a given period of time. It requires an
ObjectwithstartDateandendDateattributes as string. If startDate is not provided an error will be thrown. Setintervalto decide how detailed the returned data is, set it tohourorminuteotherwise it defaults todays.Fitness.getSleepAnalysis({ startDate: string, endDate: string }) Fetch sleep analysis data on a given period of time. It requires an
ObjectwithstartDateandendDateattributes as string. If startDate is not provided an error will be thrown.Fitness.subscribeToSteps() Available only on android. Subscribe only to steps from the Google Fit store. It returns a promise with
truefor a successful subscription andfalseotherwise. Call this function to get steps and eliminate the need to have Google Fit installed on the device.
Attributes
Platform
Return the used provider.
PermissionKinds
Return the information of what kind of Permission can be asked. At the moment the list of possible kinds is:
- Steps: to required the access for 
Steps - Distances: to required the access for 
Distances - Calories: to required the access for 
Calories - HeartRate: to required the access for 
Heart rate - Activity: to required the access for 
Activity(only Android) - SleepAnalysis: to required the access for 
Sleep Analysis 
PermissionAccesses
Return the information of what kind of Access can be asked. The list of possible kinds is:
- Read: to required the access to 
Read - Write: to required the access to 
Write 
Errors
Return the list of meaningful errors that can be possible thrown.
iOS
Possible values are:
- hkNotAvailable: thrown if HealthKit is not available
 - methodNotAvailable: thrown if 
isAuthorizedis called on iOS < 12.0 - dateNotCorrect: thrown if received date is not correct
 - errorEmptyPermissions: thrown if no read permissions are provided
 - errorNoEvents: thrown if an error occurs while try to retrieve data
 
Android
Possible values are:
- methodNotAvailable: thrown if 
getSleepAnalysisis called on Android less than N