Documentation Index
Fetch the complete documentation index at: https://mintlify.com/kingstinct/react-native-healthkit/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The useIsHealthDataAvailable hook checks whether HealthKit data is available on the current device. HealthKit is available on iOS, watchOS, and iPadOS 17+, but may be restricted in enterprise environments.
Usage
import { useIsHealthDataAvailable } from '@kingstinct/react-native-healthkit';
const isAvailable = useIsHealthDataAvailable();
Return Value
true - HealthKit is available
false - HealthKit is not available
null - Still checking availability (initial state)
Example: Basic Usage
import { useIsHealthDataAvailable } from '@kingstinct/react-native-healthkit';
import { View, Text, ActivityIndicator } from 'react-native';
function HealthKitStatus() {
const isAvailable = useIsHealthDataAvailable();
if (isAvailable === null) {
return <ActivityIndicator />;
}
return (
<View>
{isAvailable ? (
<Text>HealthKit is available on this device</Text>
) : (
<Text>HealthKit is not available</Text>
)}
</View>
);
}
Example: Conditional Rendering
import { useIsHealthDataAvailable } from '@kingstinct/react-native-healthkit';
import { View, Text } from 'react-native';
import HealthDataDashboard from './HealthDataDashboard';
function App() {
const isAvailable = useIsHealthDataAvailable();
if (isAvailable === null) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Checking HealthKit availability...</Text>
</View>
);
}
if (!isAvailable) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>HealthKit is not available on this device.</Text>
<Text>This app requires HealthKit to function.</Text>
</View>
);
}
return <HealthDataDashboard />;
}
Example: With Authorization
import {
useIsHealthDataAvailable,
useHealthkitAuthorization
} from '@kingstinct/react-native-healthkit';
import { View, Text, Button } from 'react-native';
function HealthKitSetup() {
const isAvailable = useIsHealthDataAvailable();
const [authStatus, requestAuth] = useHealthkitAuthorization({
toRead: ['HKQuantityTypeIdentifierStepCount']
});
// Don't show authorization UI if HealthKit isn't available
if (isAvailable === false) {
return (
<View>
<Text>HealthKit is not available on this device</Text>
</View>
);
}
if (isAvailable === null || authStatus === null) {
return <Text>Loading...</Text>;
}
return (
<View>
<Text>HealthKit is ready!</Text>
{authStatus !== 'unnecessary' && (
<Button
title="Grant Access"
onPress={requestAuth}
/>
)}
</View>
);
}
Synchronous Alternative
Starting with newer versions, there’s also a synchronous method Core.isHealthDataAvailable() that can be called directly without a hook.
import { Core } from '@kingstinct/react-native-healthkit/modules';
// Synchronous check
const isAvailable = Core.isHealthDataAvailable();
- iOS: Always available (unless restricted)
- watchOS: Always available
- iPadOS: Available on iPadOS 17.0+
- tvOS: Not available
- macOS: Not available
Enterprise Restrictions
Devices running in enterprise environments may have HealthKit access restricted by device management policies. This hook will return false in such cases.
See Also