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

Swift中使用Pushy pod时,如何在应用杀死/后台状态隐藏通知横幅?

解决Pushy+Firebase推送在后台/杀死状态下不显示通知横幅的问题

当应用处于后台或被杀死状态时,推送通知的展示逻辑由iOS系统直接处理,不会走你已经实现的notificationWillPresent方法,要实现需求得从推送Payload构造和后台回调处理两方面入手:

1. 修改推送Payload结构(核心)

服务器端发送推送时,调整aps字段,移除触发系统横幅的alert相关配置,只保留需要的声音配置:

{
  "aps": {
    "content-available": 1,
    "sound": "default"
  },
  "custom_data": "你的自定义业务数据"
}
  • 去掉alert字段后,iOS系统只会播放指定声音,不会弹出通知横幅;
  • content-available: 1可以让后台状态的应用被唤醒,执行后续自定义逻辑;被杀死状态下则仅播放声音,不会弹出横幅。

如果业务上必须携带alert字段,可将alert的body设为空字符串(部分iOS版本兼容,最稳妥的方式还是直接移除alert):

{
  "aps": {
    "content-available": 1,
    "sound": "default",
    "alert": {
      "body": ""
    }
  }
}

2. 配置后台/杀死状态的推送回调

实现Pushy的notificationOpened方法,处理后台或杀死状态下推送到达后的自定义逻辑:

func notificationOpened(userInfo: [String: Any], completionHandler: (() -> Void)?) {
    let remoteNotification = RemoteNotificationModel(userInfo)
    // 在这里处理你的业务逻辑,比如更新本地数据、触发页面跳转等
    completionHandler?()
}

确保在AppDelegate或推送管理类中正确注册Pushy的回调代理,保证推送到达时能执行自定义逻辑。

3. 验证应用权限(可选)

若用户已授予应用横幅通知权限,通过Payload控制依然是最可靠的方式;如果需要从权限层面限制,可引导用户在系统设置中关闭应用的横幅通知权限,但这种方式依赖用户操作,不如Payload控制灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:01