fix:APP-push点击文案显示home页
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import FontAwesome from '@expo/vector-icons/FontAwesome';
|
||||
import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
||||
import { useFonts } from 'expo-font';
|
||||
import { Stack } from 'expo-router';
|
||||
import { Stack, useRouter } from 'expo-router';
|
||||
import * as SplashScreen from 'expo-splash-screen';
|
||||
import * as Notifications from 'expo-notifications';
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
@@ -11,7 +11,8 @@ import { Animated, AppState, Image, StyleSheet, View } from 'react-native';
|
||||
import { useColorScheme } from '@/components/useColorScheme';
|
||||
import { initI18n } from '@/src/i18n';
|
||||
import { ensureDailyWidgetRecoUpToDate, syncWidgetConfig, syncWidgetUserProfileFromStorage } from '@/src/modules/dailyWidgetReco';
|
||||
import { getOrCreateClientUserId } from '@/src/storage/appStorage';
|
||||
import { getConsentAccepted, getOnboardingCompleted, getOrCreateClientUserId } from '@/src/storage/appStorage';
|
||||
import { persistHomePushMessageFromResponse } from '@/src/services/pushNotificationRoute';
|
||||
import { ensurePushTokenRegisteredIfPermitted } from '@/src/services/pushApi';
|
||||
|
||||
// 配置通知处理方式(即使不发送也建议配置,以确保权限接口正常)
|
||||
@@ -149,6 +150,7 @@ export default function RootLayout() {
|
||||
|
||||
function RootLayoutNav() {
|
||||
const colorScheme = useColorScheme();
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
// iOS 小组件:启动时把必要信息写入共享区,并尽力刷新一次“每日推荐”
|
||||
@@ -165,6 +167,44 @@ function RootLayoutNav() {
|
||||
return () => sub.remove();
|
||||
}, []);
|
||||
|
||||
const handleNotificationResponse = useCallback(
|
||||
async (response: Notifications.NotificationResponse) => {
|
||||
const message = await persistHomePushMessageFromResponse(response);
|
||||
if (!message) return;
|
||||
|
||||
const [consentAccepted, onboardingCompleted] = await Promise.all([
|
||||
getConsentAccepted(),
|
||||
getOnboardingCompleted(),
|
||||
]);
|
||||
if (consentAccepted && onboardingCompleted) {
|
||||
router.replace('/(app)/home');
|
||||
}
|
||||
},
|
||||
[router]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
|
||||
Notifications.getLastNotificationResponseAsync()
|
||||
.then((response) => {
|
||||
if (cancelled || !response) return;
|
||||
return handleNotificationResponse(response);
|
||||
})
|
||||
.catch(() => {
|
||||
// ignore:通知冷启动读取失败不阻塞主流程
|
||||
});
|
||||
|
||||
const sub = Notifications.addNotificationResponseReceivedListener((response) => {
|
||||
void handleNotificationResponse(response);
|
||||
});
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
sub.remove();
|
||||
};
|
||||
}, [handleNotificationResponse]);
|
||||
|
||||
return (
|
||||
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
|
||||
<Stack screenOptions={{ headerShown: false }}>
|
||||
|
||||
Reference in New Issue
Block a user