/** * 萝卜BBS - 主应用入口 * 配置导航、主题、状态管理等 */ import React, { useEffect, useRef } from 'react'; import { AppState, AppStateStatus } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { PaperProvider } from 'react-native-paper'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import * as Notifications from 'expo-notifications'; // 配置通知处理器 - 必须在应用启动时设置 Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldShowAlert: true, // 即使在后台也要显示通知 shouldPlaySound: true, // 播放声音 shouldSetBadge: true, // 设置角标 shouldShowBanner: true, // 显示横幅 shouldShowList: true, // 显示通知列表 }), }); import MainNavigator from './src/navigation/MainNavigator'; import { paperTheme } from './src/theme'; import AppPromptBar from './src/components/common/AppPromptBar'; import AppDialogHost from './src/components/common/AppDialogHost'; import { installAlertOverride } from './src/services/alertOverride'; // 数据库初始化移到 authStore 中,根据用户ID创建用户专属数据库 // 创建 QueryClient 实例 const queryClient = new QueryClient({ defaultOptions: { queries: { retry: 2, staleTime: 5 * 60 * 1000, // 5分钟 }, }, }); installAlertOverride(); export default function App() { const appState = useRef(AppState.currentState); const notificationResponseListener = useRef(null); // 系统通知功能初始化 useEffect(() => { const initNotifications = async () => { const { systemNotificationService } = await import('./src/services/systemNotificationService'); await systemNotificationService.initialize(); // 初始化后台保活服务 const { initBackgroundService } = await import('./src/services/backgroundService'); await initBackgroundService(); console.log('[App] 后台保活服务已初始化'); // 监听 App 状态变化 const subscription = AppState.addEventListener('change', (nextAppState) => { if ( appState.current.match(/inactive|background/) && nextAppState === 'active' ) { systemNotificationService.clearBadge(); } appState.current = nextAppState; }); // 监听通知点击响应 notificationResponseListener.current = Notifications.addNotificationResponseReceivedListener( (response) => { const data = response.notification.request.content.data; console.log('[App] 通知被点击:', data); } ); // 监听通知到达(用于前台显示时额外处理) const notificationReceivedSubscription = Notifications.addNotificationReceivedListener( (notification) => { console.log('[App] 通知已接收:', notification.request.content.title); } ); return () => { subscription.remove(); notificationResponseListener.current?.remove(); notificationReceivedSubscription.remove(); }; }; initNotifications(); }, []); return ( ); }