Android:Firebase推送中onMessageReceived未调用时,启动Activity如何接收数据?
Firebase Cloud Messaging 消息接收逻辑详解
一、onMessageReceived 不被调用的场景
只有当发送的是纯通知消息(仅包含notification字段,无data字段),且应用处于后台或完全未运行状态时,Firebase SDK会直接接管这条通知,由系统在通知栏展示推送内容,此时onMessageReceived不会被触发。
二、通知数据自动进入启动Activity Intent的机制
当用户点击系统通知栏中的这条纯通知时,Firebase SDK会自动启动应用的启动页(AndroidManifest中配置的launcher Activity),并将通知的相关数据(如title、body,若有额外data字段也会包含在内)打包进启动Intent的extras中。你可以在启动Activity的onCreate或onNewIntent方法里通过getIntent().getExtras()获取这些数据。
三、你的测试结果为何不同?
你测试时onMessageReceived每次都能触发,大概率是因为你发送的是纯数据消息(仅包含data字段),或是通知+数据的混合消息——这类消息无论应用处于前台、后台还是未运行状态,onMessageReceived都会被调用,数据由你自行处理展示逻辑。
四、核心总结
- 纯通知消息(仅
notification字段):后台/未运行时系统接管,点击后数据自动进入启动Activity的Intent,onMessageReceived不执行。 - 纯数据消息/混合消息:任何状态下
onMessageReceived都会触发,数据不会自动进入启动Activity的Intent(除非你在onMessageReceived中通过PendingIntent手动传递)。
内容的提问来源于stack exchange,提问作者testivanivan
相关产品推荐
相关产品推荐

