Android FCM onMessageReceived的运行时机总结

本文详细总结了Android中Firebase Cloud Messaging (FCM) 的onMessageReceived方法的执行时机,根据消息类型(Notification或Data)和优先级设置,分析了APP在前台、后台甚至被杀死状态时,消息的接收和处理情况。并提供了不同情况下的消息示例,包括国产手机系统对FCM消息的处理差异。
摘要由CSDN通过智能技术生成

FCM消息的官方文档:

https://firebase.google.com/docs/cloud-messaging/concept-options

https://firebase.google.cn/docs/cloud-messaging/concept-options(中文镜像网址)

 

        简单来说,FCM 消息有两种类型,一种是Notification消息,消息的Json格式中有notification包裹(仅有notification!!):

 "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }

       另一种是Data消息,消息的Json格式中有notification包裹:

"data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }

      如果消息格式中notification字段和data字段并存,那么这个消息被划归为一个Notification消息。值得注意的是:如果Json中只有一个data{}包裹,但是里面有个字段名叫 “gcm.notification.XXX”,那么这个消息即使没有notification字段,也会被划归为一个Notification消息。

       上面先写消息类型的原因,是因为FirebaseMessagingService子类中的onMessageReceived这个接收函数的执行时机,跟消息的类型息息相关。下文结论中的MyFirebaseMessagingService是FirebaseMessagingService的子类,很神奇的一点是,如果用了FCM会发现,即使APP没运行把APP给杀掉了,这时候如果收到了FCM通知,APP里的MyFirebaseMessagingService里面的onMessageReceived回调也会被调用执行!!!!这个Service在APP被杀掉以后,还是由系统级别去保活的(当然如果手机锁屏休眠进入低电耗模式Doze的话,这个回调就不会被执行了)。在下面用PushTry这个测试网址(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值