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

使用Expo在App后台发送推送通知的机制及触发方式咨询

刚好对Expo的推送通知这块摸得门清,来给你详细唠唠~

Expo后台状态下的推送通知机制

首先得区分App的两种后台状态,表现不太一样:

  • 后台挂起状态(App完全退到后台,没有任何后台任务在运行):推送通知会直接弹在系统通知栏里,只有用户点击通知后才会唤醒App。这时你可以通过NotificationReceivedListener或者NotificationResponseReceivedListener来处理后续逻辑,但要注意iOS对后台唤醒后的处理时间有严格限制(大概30秒左右,超时会被系统终止)。
  • 后台运行状态(比如App有后台同步任务在执行):
    • Android:只要App没被系统彻底杀死,就能直接接收并处理推送,甚至可以配置成不展示通知栏提醒(通过调整推送payload里的priority或者content_available参数)。
    • iOS:需要在推送payload里带上content_available: true,系统才会唤醒App的后台进程,你可以在NotificationReceivedListener里做一些轻量操作(比如同步数据),但同样有时间限制;如果用户手动把App从后台划掉,这个唤醒机制就失效了。
服务器触发与提前调度支持

这俩需求Expo都完全支持,分两种情况说:

  • 服务器触发推送:绝对没问题!Expo提供了官方的Push API,你可以在自己的后端服务里调用这个API,给指定的Expo推送令牌发送通知——不管App是前台还是后台,只要设备在线(或者后续恢复网络)都能收到。给你贴个简单的Node.js示例代码:
    import { Expo } from 'expo-server-sdk';
    const expo = new Expo();
    
    // 构造推送消息
    const pushMessages = [{
      to: '用户的EXPO推送令牌',
      sound: 'default',
      title: '服务器推送通知',
      body: '这是后端触发的后台推送',
      data: { customData: '你可以带自定义业务数据' },
      // iOS需要这个参数才能触发后台唤醒处理
      content_available: true
    }];
    
    // 按Expo要求拆分消息(避免单请求消息过多)
    const messageChunks = expo.chunkPushNotifications(pushMessages);
    // 循环发送每个消息块
    for (const chunk of messageChunks) {
      try {
        const receipts = await expo.sendPushNotificationsAsync(chunk);
        console.log('推送回执:', receipts);
      } catch (error) {
        console.error('推送失败:', error);
      }
    }
    
  • 提前调度推送:有两种实现方式:
    • 客户端本地调度:用Expo提供的Notifications.scheduleNotificationAsync()方法,在App里提前设置好推送的时间,哪怕App处于后台或者被关闭(只要设备没关机),到点系统都会自动触发通知。适合做比如日程提醒这类本地触发的功能。
    • 服务器端调度:如果你想在后端控制推送时间,Expo的Push API本身不支持直接设置未来发送时间,所以需要你自己在后端搭建定时任务(比如用Node.js的node-schedule、Java的Quartz,或者云服务商的定时函数),到预定时间再调用Expo的Push API发送通知。
额外注意事项
  • iOS端:必须在app.json里配置ios.infoPlist.UIBackgroundModes包含remote-notification,否则后台推送的唤醒逻辑完全不生效。
  • Android端:要注意厂商的电池优化策略,有些机型会限制后台App的推送接收,可能需要引导用户把App加入白名单或者关闭电池优化。
  • 推送令牌是和设备、App实例绑定的,用户卸载重装App后令牌会变更,记得在后端及时更新令牌列表,避免推送失败。

内容的提问来源于stack exchange,提问作者eth.block

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:31:30