You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何完全阻止Expo通知的弹窗提醒?

解决Expo通知弹窗完全屏蔽问题

你当前的setNotificationHandler配置仅对应用前台收到的通知生效,后台、应用终止状态下的通知弹窗由推送请求的Payload配置决定;另外手机关机状态下无法接收推送,你遇到的应该是重启后收到的离线缓存通知,这类通知同样受Payload控制。以下是分场景的解决方案:

1. 应用前台:确保Handler初始化时机正确

你的代码逻辑本身没问题,但要保证setNotificationHandler在App组件挂载前就完成初始化,避免因时机过晚导致前台通知仍弹出:

import * as Notifications from "expo-notifications";

// 必须在App组件初始化前执行
Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: false,
    shouldPlaySound: false,
    shouldSetBadge: false,
  }),
});

export default function App() {
  // ... 你的组件代码
}

2. 应用后台/终止状态:修改推送Payload

后台和终止状态下,通知由系统直接处理,不会经过App内的Handler,必须在发送推送时移除弹窗相关配置:

  • 若使用Expo Push API发送请求,Payload中不要包含title、body字段,同时设置sound为null、badge为0:
{
  "to": "你的EXPO推送令牌",
  "data": { "refresh": true }, // 仅传递触发数据刷新的标识
  "sound": null,
  "badge": 0
}

注意:只要Payload中存在title或body,系统就会强制弹出通知,和App内的Handler设置无关。

3. 本地通知场景检查

如果是使用scheduleNotificationAsync创建的本地通知,同样要确保不配置弹窗内容:

// 无弹窗的本地通知示例
await Notifications.scheduleNotificationAsync({
  content: {
    data: { refresh: true }, // 仅传递业务数据
    sound: null,
    badge: 0,
  },
  trigger: { seconds: 5 }, // 按你的触发逻辑配置
});

内容的提问来源于stack exchange,提问作者user24650213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:00:01