From edac180dd6c44bd8508b5404de6059e49b036069 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Fri, 12 Sep 2025 15:54:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(health):=20=E7=BB=9F=E4=B8=80=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=85=B1=E4=BA=AB=E7=9A=84HealthKit=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=96=B9=E6=B3=95=E5=B9=B6=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将sleepHealthKit模块中的HealthKit权限初始化逻辑替换为使用health工具中的通用ensureHealthPermissions方法,移除重复的权限配置代码。同时更新后台任务标识符以保持一致性。 --- ios/digitalpilates/Info.plist | 2 +- services/backgroundTaskManager.ts | 2 +- utils/health.ts | 30 ++++++++++++++-------------- utils/sleepHealthKit.ts | 33 ++----------------------------- 4 files changed, 19 insertions(+), 48 deletions(-) diff --git a/ios/digitalpilates/Info.plist b/ios/digitalpilates/Info.plist index 0a598c6..8b361ac 100644 --- a/ios/digitalpilates/Info.plist +++ b/ios/digitalpilates/Info.plist @@ -4,7 +4,7 @@ BGTaskSchedulerPermittedIdentifiers - com.expo.modules.backgroundtask.processing + backgroundtask CADisableMinimumFrameDurationOnPhone diff --git a/services/backgroundTaskManager.ts b/services/backgroundTaskManager.ts index 6818035..294fc3e 100644 --- a/services/backgroundTaskManager.ts +++ b/services/backgroundTaskManager.ts @@ -6,7 +6,7 @@ import * as BackgroundTask from 'expo-background-task'; import * as TaskManager from 'expo-task-manager'; import { TaskManagerTaskBody } from 'expo-task-manager'; -export const BACKGROUND_TASK_IDENTIFIER = 'com.expo.modules.backgroundtask.processing'; +export const BACKGROUND_TASK_IDENTIFIER = 'backgroundtask'; diff --git a/utils/health.ts b/utils/health.ts index ce483ba..4b4ef4b 100644 --- a/utils/health.ts +++ b/utils/health.ts @@ -77,21 +77,21 @@ export async function ensureHealthPermissions(): Promise { console.log('开始初始化HealthKit...'); resolve(true) - // AppleHealthKit.initHealthKit(PERMISSIONS, (error) => { - // if (error) { - // console.error('HealthKit初始化失败:', error); - // // 常见错误处理 - // if (typeof error === 'string') { - // if (error.includes('not available')) { - // console.warn('HealthKit不可用 - 可能在模拟器上运行或非iOS设备'); - // } - // } - // resolve(false); - // return; - // } - // console.log('HealthKit初始化成功'); - // resolve(true); - // }); + AppleHealthKit.initHealthKit(PERMISSIONS, (error) => { + if (error) { + console.error('HealthKit初始化失败:', error); + // 常见错误处理 + if (typeof error === 'string') { + if (error.includes('not available')) { + console.warn('HealthKit不可用 - 可能在模拟器上运行或非iOS设备'); + } + } + resolve(false); + return; + } + console.log('HealthKit初始化成功'); + resolve(true); + }); }); } diff --git a/utils/sleepHealthKit.ts b/utils/sleepHealthKit.ts index 3c06cd1..06e8606 100644 --- a/utils/sleepHealthKit.ts +++ b/utils/sleepHealthKit.ts @@ -1,5 +1,6 @@ import dayjs from 'dayjs'; import HealthKit from 'react-native-health'; +import { ensureHealthPermissions } from './health'; // 睡眠阶段枚举 export enum SleepStage { @@ -59,34 +60,6 @@ export type CompleteSleepData = { recommendation: string; }; -// HealthKit 权限配置 -const permissions = { - permissions: { - read: [ - HealthKit.Constants.Permissions.SleepAnalysis, - HealthKit.Constants.Permissions.HeartRate, - ], - write: [], // 我们只读取数据,不写入 - }, -}; - -/** - * 初始化 HealthKit 权限 - */ -export const initializeHealthKit = (): Promise => { - return new Promise((resolve, reject) => { - HealthKit.initHealthKit(permissions, (error: string) => { - if (error) { - console.error('[HealthKit] 权限初始化失败:', error); - reject(new Error(error)); - } else { - console.log('[HealthKit] 权限初始化成功'); - resolve(true); - } - }); - }); -}; - /** * 创建睡眠日期范围 (从前一天 18:00 到当天 12:00) */ @@ -397,9 +370,7 @@ export const fetchCompleteSleepData = async (date: Date): Promise