.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
相关产品推荐
相关产品推荐

