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

Ionic 6 Angular应用无法接收后台推送通知问题求助

解决Ionic Angular + Capacitor 3后台/杀死状态下推送通知不显示问题

针对你遇到的前台能接收推送但后台/应用杀死后系统托盘无通知的问题,从配置、推送格式、代码逻辑三个核心方向排查:

一、Android平台配置检查

  • Firebase配置文件验证:确保google-services.json已放在android/app目录下,文件内的包名与Firebase项目注册的包名完全一致。
  • 通知通道关联:Android 8.0+必须指定通知通道才能显示通知。你代码中创建了test通道,但推送时必须在payload里指定channel_id: "test",否则系统不会展示通知。
  • 权限与服务配置:检查AndroidManifest.xml是否添加必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ 必填 -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
    同时确认Capacitor推送服务已注册:
    <service
        android:name="com.getcapacitor.plugin.pushnotifications.PushNotificationsFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  • 电池优化豁免:部分安卓厂商的电池优化会阻止后台推送,需将应用设置为「不优化电池使用」。

二、iOS平台配置检查

  • Firebase配置文件集成:GoogleService-Info.plist必须通过Xcode添加到项目(直接复制到目录无效),添加时勾选Copy items if needed。
  • Xcode能力配置:在项目Signing & Capabilities中,确保添加Push Notifications能力,同时在Background Modes里勾选Remote notifications。
  • 系统通知权限:除了应用内请求的权限,还要在设备系统设置中确认应用的通知权限已开启(包括锁屏、通知中心展示权限)。

三、推送Payload格式问题

不管是自有API还是Firebase控制台,推送格式必须符合平台要求,否则后台/杀死状态下不会触发系统托盘通知:

  • Android推送示例:必须包含notification字段,且指定通道ID
    {
      "notification": {
        "title": "测试通知",
        "body": "后台通知测试",
        "channel_id": "test"
      },
      "to": "设备Token"
    }
    
  • iOS推送示例:必须包含aps字段,且带alert内容
    {
      "aps": {
        "alert": {
          "title": "测试通知",
          "body": "后台通知测试"
        },
        "sound": "default"
      },
      "to": "设备Token"
    }
    
  • Firebase控制台注意事项:选择「Notification」类型推送(而非「Data」类型),纯Data消息在后台/杀死状态下不会触发系统托盘,需配合Notification字段使用。

四、代码逻辑修复

你的代码存在两处关键问题,会导致推送初始化异常:

  1. 构造函数不能直接用await:构造函数无法标记为async,需把初始化逻辑抽成独立async函数:
    constructor(private platform: Platform) {
      this.initPushNotifications();
    }
    
    private async initPushNotifications() {
      if (this.platform.is('ios') || this.platform.is('android')) {
          let permissions = await PushNotifications.checkPermissions();
    
          if (permissions.receive == "granted") {
              await this.setupFirebase();
          } else {
              let permissions = await PushNotifications.requestPermissions();
    
              if (permissions.receive == "granted") {
                  await this.setupFirebase();
              } 
          }
      }
    }
    
  2. 通道创建时机修正:register()是异步操作,需用await确保注册完成后再创建通道:
    private async setupFirebase() {
      // ... 监听器代码保持不变 ...
    
      await PushNotifications.register();
      await PushNotifications.createChannel({id: "test", name: "test", importance: 5});
    }
    

五、额外排查步骤

  • 确认设备Token已正确上传到自有API,推送时使用的Token有效
  • 查看Firebase控制台的消息发送记录,排查是否存在Token无效、权限拒绝等报错
  • 使用真实设备测试,模拟器对推送通知的兼容性较差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:54:53