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

iOS后台状态下Notifee EventType.PRESS事件无法触发求助

问题分析与解决方案

1. 修复事件监听器的变量名错误

你的onBackgroundEvent回调存在变量名不匹配的问题:你解构了{type, detail}参数,但代码中却使用了未定义的event变量,这会导致即使EventType.PRESS事件触发,也无法正确检测到。

修正后的代码:

notifee.onBackgroundEvent(async (event) => {
  console.log('onBackgroundEvent', event.type);
  if (event.type === EventType.PRESS) {
    console.log('User pressed the notification.', event.detail.pressAction?.id);
  }
});

或者使用解构写法:

notifee.onBackgroundEvent(async ({type, detail}) => {
  console.log('onBackgroundEvent', type);
  if (type === EventType.PRESS) {
    console.log('User pressed the notification.', detail.pressAction?.id);
  }
});

2. 为通知配置pressAction

Notifee需要显式配置pressAction才能触发EventType.PRESS事件,默认情况下,未配置pressAction的通知点击行为不会触发该事件。

修改handleBackgroundMessage中的通知配置:

const handleBackgroundMessage = async message => {
  console.log('handleBackgroundMessage');
  await notifee.requestPermission();

  // 创建iOS通知频道(iOS 10+ 必需)
  const channelId = await notifee.createChannel({
    id: 'default',
    name: '默认通知频道',
  });

  const notificationPayload = {
    title: message.data.title + ' pdosprewq',
    body: message.data.body,
    channelId, // 关联通知频道
    pressAction: {
      id: 'default', // 必须设置唯一ID,才能触发PRESS事件
    },
    ios: {
      foregroundPresentationOptions: {
        alert: true,
        badge: true,
        sound: true,
      },
    },
  };

  await notifee.displayNotification(notificationPayload);
};

3. 验证iOS通知权限配置

确保你的应用已获得完整的通知权限,包括提醒权限,否则通知点击行为可能无法正常触发。你可以在iOS设置中检查应用的通知权限,或通过notifee.getPermissions()确认权限状态。

4. 确认远程通知类型

服务器推送的远程通知必须是**仅数据(data-only)**类型,这样才会触发handleBackgroundMessage回调。如果推送的是包含alert字段的通知,iOS系统会直接显示通知,不会进入你的自定义处理逻辑,导致pressAction配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:32:06