feat: 支持 healthkit

This commit is contained in:
richarjiang
2025-09-17 18:05:11 +08:00
parent 63ed820e93
commit 6b7776e51d
15 changed files with 1675 additions and 532 deletions

View File

@@ -18,7 +18,7 @@ import { fetchDailyMoodCheckins, selectLatestMoodRecordByDate } from '@/store/mo
import { fetchDailyNutritionData, selectNutritionSummaryByDate } from '@/store/nutritionSlice';
import { fetchTodayWaterStats } from '@/store/waterSlice';
import { getMonthDaysZh, getTodayIndexInMonth } from '@/utils/date';
import { ensureHealthPermissions, fetchHealthDataForDate, testHRVDataFetch } from '@/utils/health';
import { fetchHealthDataForDate, testHRVDataFetch } from '@/utils/health';
import { getTestHealthData } from '@/utils/mockHealthData';
import { calculateNutritionGoals } from '@/utils/nutrition';
import dayjs from 'dayjs';
@@ -248,12 +248,12 @@ export default function ExploreScreen() {
loadingRef.current.health = true;
console.log('=== 开始HealthKit初始化流程 ===');
const ok = await ensureHealthPermissions();
if (!ok) {
const errorMsg = '无法获取健康权限请确保在真实iOS设备上运行并授权应用访问健康数据';
console.warn(errorMsg);
return;
}
// const ok = await ensureHealthPermissions();
// if (!ok) {
// const errorMsg = '无法获取健康权限请确保在真实iOS设备上运行并授权应用访问健康数据';
// console.warn(errorMsg);
// return;
// }
latestRequestKeyRef.current = requestKey;

View File

@@ -16,6 +16,7 @@ import { WaterRecordSource } from '@/services/waterRecords';
import { store } from '@/store';
import { rehydrateUserSync, setPrivacyAgreed } from '@/store/userSlice';
import { createWaterRecordAction } from '@/store/waterSlice';
import { ensureHealthPermissions } from '@/utils/health';
import { DailySummaryNotificationHelpers, MoodNotificationHelpers, NutritionNotificationHelpers } from '@/utils/notificationHelpers';
import { clearPendingWaterRecords, syncPendingWidgetChanges } from '@/utils/widgetDataSync';
import React from 'react';
@@ -41,9 +42,20 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
await dispatch(rehydrateUserSync());
setUserDataLoaded(true);
};
const initHealthPermissions = async () => {
// 初始化 HealthKit 权限
try {
console.log('开始请求 HealthKit 权限...');
await ensureHealthPermissions();
console.log('HealthKit 权限初始化完成');
} catch (error) {
console.warn('HealthKit 权限初始化失败,可能在模拟器上运行:', error);
}
}
const initializeNotifications = async () => {
try {
await BackgroundTaskManager.getInstance().initialize();
// 初始化通知服务
await notificationService.initialize();
@@ -102,6 +114,7 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
};
loadUserData();
initHealthPermissions();
initializeNotifications();
// 冷启动时清空 AI 教练会话缓存
clearAiCoachSessionCache();