feat: 支持原生模块健康数据

This commit is contained in:
richarjiang
2025-09-18 09:51:37 +08:00
parent 6b7776e51d
commit 6f0c872223
115 changed files with 1791 additions and 2851 deletions

View File

@@ -1,6 +1,4 @@
import dayjs from 'dayjs';
import type { HealthActivitySummary, HealthKitPermissions } from 'react-native-health';
import AppleHealthKit from 'react-native-health';
type HealthDataOptions = {
startDate: string;
@@ -8,30 +6,30 @@ type HealthDataOptions = {
};
const PERMISSIONS: HealthKitPermissions = {
permissions: {
read: [
AppleHealthKit.Constants.Permissions.StepCount,
AppleHealthKit.Constants.Permissions.ActiveEnergyBurned,
AppleHealthKit.Constants.Permissions.BasalEnergyBurned,
AppleHealthKit.Constants.Permissions.SleepAnalysis,
AppleHealthKit.Constants.Permissions.HeartRateVariability,
AppleHealthKit.Constants.Permissions.ActivitySummary,
AppleHealthKit.Constants.Permissions.OxygenSaturation,
AppleHealthKit.Constants.Permissions.HeartRate,
AppleHealthKit.Constants.Permissions.Water,
// 添加 Apple Exercise Time 和 Apple Stand Time 权限
AppleHealthKit.Constants.Permissions.AppleExerciseTime,
AppleHealthKit.Constants.Permissions.AppleStandTime,
],
write: [
// 支持体重写入
AppleHealthKit.Constants.Permissions.Weight,
// 支持饮水量写入
AppleHealthKit.Constants.Permissions.Water,
],
},
};
// const PERMISSIONS: HealthKitPermissions = {
// permissions: {
// read: [
// AppleHealthKit.Constants.Permissions.StepCount,
// AppleHealthKit.Constants.Permissions.ActiveEnergyBurned,
// AppleHealthKit.Constants.Permissions.BasalEnergyBurned,
// AppleHealthKit.Constants.Permissions.SleepAnalysis,
// AppleHealthKit.Constants.Permissions.HeartRateVariability,
// AppleHealthKit.Constants.Permissions.ActivitySummary,
// AppleHealthKit.Constants.Permissions.OxygenSaturation,
// AppleHealthKit.Constants.Permissions.HeartRate,
// AppleHealthKit.Constants.Permissions.Water,
// // 添加 Apple Exercise Time 和 Apple Stand Time 权限
// AppleHealthKit.Constants.Permissions.AppleExerciseTime,
// AppleHealthKit.Constants.Permissions.AppleStandTime,
// ],
// write: [
// // 支持体重写入
// AppleHealthKit.Constants.Permissions.Weight,
// // 支持饮水量写入
// AppleHealthKit.Constants.Permissions.Water,
// ],
// },
// };
export type HourlyStepData = {
hour: number; // 0-23

View File

@@ -3,7 +3,7 @@
* React Native TypeScript bindings for iOS HealthKit access
*/
import { NativeModules } from 'react-native';
import { requireNativeModule } from 'expo-modules-core';
export interface HealthKitPermissions {
[key: string]: 'notDetermined' | 'denied' | 'authorized' | 'unknown';
@@ -50,6 +50,12 @@ export interface HealthKitManagerInterface {
*/
requestAuthorization(): Promise<HealthKitAuthorizationResult>;
/**
* Get current authorization status for HealthKit data types
* This checks the current permission status without prompting the user
*/
getAuthorizationStatus(): Promise<HealthKitAuthorizationResult>;
/**
* Get sleep analysis data from HealthKit
* @param options Query options including date range and limit
@@ -57,11 +63,8 @@ export interface HealthKitManagerInterface {
getSleepData(options?: SleepDataOptions): Promise<SleepDataResult>;
}
console.log('NativeModules', NativeModules);
// Native module interface
const HealthKitManager: HealthKitManagerInterface = NativeModules.HealthKitManager;
const HealthKitManager: HealthKitManagerInterface = requireNativeModule('HealthKitManager');
export default HealthKitManager;

View File

@@ -374,7 +374,9 @@ export const fetchCompleteSleepData = async (date: Date): Promise<CompleteSleepD
return null;
}
await HealthKitManager.requestAuthorization()
const res = await HealthKitManager.requestAuthorization()
const status = await HealthKitManager.getAuthorizationStatus()
console.log('status~~~', status);
// await ensureHealthPermissions()
// 获取睡眠样本
const sleepSamples = await fetchSleepSamples(date);