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

iOS端含Alert+Data的FCM消息无法稳定触发FirebaseMessaging.onMessage

iOS 18前台Firebase通知onMessage回调间歇性失效问题

问题背景

我开发了一个简易Flutter应用用于监听Firebase通知,监听代码如下:

FirebaseMessaging.onMessage.listen((RemoteMessage message) => print("hello"))

消息通过Go语言发送,代码如下:

var apsMessage = messaging.Aps{
    ContentAvailable: true,
    MutableContent:  true,  // 我觉得这个可能不需要
    Alert: &messaging.ApsAlert{
        Title: "Incoming message",
        Body:  "mybody",
    },
    CustomData: map[string]interface{}{
        "interruption-level": "active",
    },
    Sound: "default"
}

messagingClient.Send(ctx, &messaging.Message{
    Token: token,
    Android: ...,
    APNS: &messaging.APNSConfig{
        Headers: map[string]string{
            "apns-priority": "10"},
        Payload: &messaging.APNSPayload{
            Aps: &apsMessage,
            CustomData: map[string]interface{}{
                "data_key": "data_value",
            },
        },
    },
})

测试场景:应用始终处于前台,使用搭载最新iOS 18的物理iPhone。
问题现象:第一条消息可正常接收(通知弹窗+MacOS控制台能看到print输出);但从第二条消息开始,仅能看到通知弹窗,print语句不再执行,后续偶尔又会恢复正常,未发现onMessage回调抛出异常。

可能原因及解决方法

1. iOS 18前台通知节流机制

iOS 18对短时间内重复发送的前台通知做了节流优化,当多条带Alert的通知连续抵达时,系统可能只展示弹窗,暂缓投递到应用内部的onMessage回调,避免应用频繁被唤醒。

  • 解决办法:
    • 若不需要前台弹窗,直接移除Alert字段,仅保留ContentAvailable: true,消息会直接投递到回调,绕过系统弹窗和节流逻辑;
    • 必须保留弹窗的话,拉长消息发送间隔,或者将interruption-level改为passive(会降低通知优先级,减少被节流的概率)。

2. MutableContent字段的冗余影响

你怀疑的MutableContent: true确实可能是问题点——这个字段是给通知扩展(Notification Service Extension)用的,如果你没配置对应的扩展,iOS 18下的新逻辑可能会因为找不到扩展处理,导致消息投递路径异常,进而跳过onMessage回调。

  • 解决办法:直接删掉这个字段,或者设置为false。

3. APNS优先级设置问题

当前设置的apns-priority: 10是最高优先级,iOS 18对高优先级前台通知的投递有更严格的限制,连续发送可能被系统判定为骚扰,从而限制应用内部回调触发。

  • 解决办法:尝试把apns-priority改为5(普通优先级),测试回调是否恢复稳定。

4. Flutter Firebase插件适配问题

iOS 18是新系统,firebase_messaging插件可能存在适配bug,导致前台回调间歇性失效。

  • 解决办法:
    • 把firebase_messaging升级到最新版本,官方大概率会修复iOS 18相关的适配问题;
    • 检查通知权限请求逻辑,确保前台通知权限已正确开启,示例代码:
      FirebaseMessaging.instance.requestPermission(
        alert: true,
        badge: true,
        sound: true,
        provisional: false,
      );
      

5. 系统通知设置干扰

检查iPhone的通知设置,确保应用的前台通知权限处于开启状态,同时确认没有开启专注模式、通知静音等可能影响通知投递的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:14:55