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

如何通过Expo Push API为iOS设备设置content-available:1以支持后台通知

解决Expo Push API设置content-available:1的问题

正确的Expo Push API请求格式

你之前的错误是将aps.content-available嵌套在data字段中,Expo Push API不会把data里的aps字段转发到APNs的payload顶层aps键下。正确的做法是将aps作为请求体的顶层字段传入,示例请求体如下:

{
  "to": "EXPO_PUSH_TOKEN",
  "title": "后台通知测试",
  "body": "这是一条支持后台处理的通知",
  "aps": {
    "content-available": 1
  },
  "data": {
    "customKey": "自定义数据"
  }
}

发送这个请求后,Expo会将aps字段直接注入到APNs最终的payload中,确保content-available:1生效。

确认后台任务配置正确性

  1. 注册后台通知任务
    在App.js中确保正确注册并配置通知处理:

    import * as Notifications from 'expo-notifications';
    
    // 注册后台任务(任务名要和后台任务文件中的导出名一致)
    Notifications.registerTaskAsync('background-notification-task');
    
    // 设置通知处理规则(静默通知不需要弹窗)
    Notifications.setNotificationHandler({
      handleNotification: async () => ({
        shouldShowAlert: false,
        shouldPlaySound: false,
        shouldSetBadge: false,
      }),
    });
    
  2. 实现后台任务
    创建单独的后台任务文件(比如backgroundTasks.js),导出任务函数:

    import * as Notifications from 'expo-notifications';
    
    export async function backgroundNotificationTask({ data, error, executionInfo }) {
      if (data) {
        // 这里处理后台收到的通知数据,比如写入本地存储或执行逻辑
        console.log('后台通知数据:', data);
      }
    }
    
    // 注册任务
    Notifications.registerTaskAsync('background-notification-task');
    
  3. app.json配置检查
    确保UIBackgroundModes和通知插件配置正确:

    {
      "expo": {
        "ios": {
          "infoPlist": {
            "UIBackgroundModes": ["remote-notification"]
          }
        },
        "plugins": [
          [
            "expo-notifications",
            {
              "icon": "./assets/icon.png",
              "color": "#000000"
            }
          ]
        ]
      }
    }
    

关键测试注意事项

  • 不能用Expo Go测试:Expo Go不支持后台任务,必须使用自定义开发构建(eas build --profile development)或生产构建的IPA包安装到真机测试。
  • 确保App真正处于后台:测试时完全退出App到后台(不要停留在多任务界面),甚至锁屏,才能触发后台通知处理逻辑。
  • 静默通知无UI提示:设置content-available:1的通知是静默通知,不会显示弹窗或角标,你需要通过后台任务中的日志、本地存储记录等方式验证是否触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:37