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

.NET Maui中Plugin.Firebase后台通知接收异常问题咨询

Firebase后台通知显示异常问题(Plugin.Firebase)

问题描述

我正在开发一款使用Plugin.Firebase的应用,需要接收携带数据字段的通知,发送端示例代码如下:

var message = new Message()
{
    Notification = new Notification()
    {
        Title = "My Title",
        Body = "My Body"
    },
    Data = new Dictionary<string, string>()
    {
        {"Type",XXX},    
        {"A",XXX},
    },
    Topic = "XXXX"
};

根据应用默认语言,通知正文应该显示字段A而非原正文“My Body”。应用处于前台时该逻辑正常,但在待机或未驻留内存状态下,始终显示原正文,且FirebaseMessagingService的OnMessageReceived事件似乎未被触发。请问这是否正常?有没有管理后台通知的其他方案?


解答

这是正常行为

Firebase的通知机制就是这样:当发送的消息同时包含Notification和Data字段时:

  • 应用前台:消息会直接传递到OnMessageReceived,你可以完全自定义通知内容,所以你的字段替换逻辑能正常执行。
  • 应用后台/未启动:系统会直接展示Notification字段里的预设内容,不会触发OnMessageReceived,自然无法执行你的替换逻辑。

可选解决方案

1. 仅发送Data类型消息

去掉消息中的Notification字段,把标题、正文等需要展示的内容都放到Data里。这样无论应用处于什么状态,消息都会触发OnMessageReceived事件,你可以在事件中手动构建并展示自定义通知,完全控制内容显示。示例发送代码:

var message = new Message()
{
    Data = new Dictionary<string, string>()
    {
        {"Type",XXX},    
        {"A",XXX},
        {"Title", "My Title"} // 将标题也存入Data字段
    },
    Topic = "XXXX"
};

2. 用Firebase原生本地化通知

如果想依赖系统处理通知展示,可以在发送消息时直接指定多语言的通知内容,Firebase会根据设备系统语言自动匹配对应文本。示例:

var message = new Message()
{
    Notification = new Notification()
    {
        TitleLocKey = "notification_title", // 对应应用本地化资源中的键
        BodyLocKey = "notification_body",
        BodyLocArgs = new List<string> { "XXX" } // 用于替换正文占位符的参数
    },
    Data = new Dictionary<string, string>()
    {
        {"Type",XXX},    
        {"A",XXX},
    },
    Topic = "XXXX"
};

这种方式下,系统会自动加载对应语言的本地化文本,无需在应用内做字段替换处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:29:56