我已经设置了 Expo-Notifications,并且使用本地通知作为提醒,一切正常,直到我需要在应用程序内显示通知为止。当应用程序在后台时,通知总是显示,但我无法让它在前台工作。
App.tsx:
import * as Notifications from "expo-notifications";
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: true,
shouldSetBadge: false,
}),
});
const App = () => {
const notificationListener = useRef();
const responseListener = useRef();
const [notification, setNotification] = useState(false);
useEffect(() => {
const getPerm = async() => {
const { status: existingStatus } = await Notifications.getPermissionsAsync();
let finalStatus = existingStatus
if(existingStatus !== 'granted'){
const { lastStatus }:any = await Notifications.requestPermissionsAsync();
finalStatus = lastStatus
}
if (finalStatus !== "granted") {
console.log("Failed to get push token for push notification!");
return;
}
}
getPerm()
notificationListener.current = Notifications.addNotificationReceivedListener(notification => {
setNotification(notification);
console.log("NOTIF: ", notification)
});
responseListener.current = Notifications.addNotificationResponseReceivedListener(response => {
console.log("RES: ",response);
});
return () => {
Notifications.removeNotificationSubscription(notificationListener.current);
Notifications.removeNotificationSubscription(responseListener.current);
};
}, []) ....
如何在不同的文件中安排通知:
const triggerNotifications = async () => {
await Notifications.scheduleNotificationAsync({
content: {
title: "You’ve got mail! 📬",
body: "Here is the notification body",
data: { data: "goes here" }
},
trigger: { seconds: 5 },
});
}
您也应该拥有这部分代码:
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: true,
shouldSetBadge: false,
}),
});