首页 > 解决方案 > 电池电量不足时,Android Oreo 中未收到 FCM 通知

问题描述

我目前正在 FCM 消息接收事件上启动我的视频通话应用程序。它工作正常。但是在奥利奥中,当电池电量很低时,我没有收到任何 FCM 通知。但即使在那种情况下,Whatsapp 也能正常工作

我正在发送以下 JSON:

{
    "to" : "XXXDecviceToken",
     "data" : {
         "callId" : "Call ID",
         "displayName" : "Abhilash", 
         "room" : "2000"
     }, 
     "time_to_live" : 0
}

标签: androidfirebasefirebase-cloud-messagingandroid-8.0-oreoandroid-8.1-oreo

解决方案


查看您的 JSON 请求:

{
    "to" : "XXXDecviceToken",
     "data" : {
         "callId" : "Call ID",
         "displayName" : "Abhilash", 
         "room" : "2000"
     }, 
     "time_to_live" : 0
}

有两个问题可能会阻止您在电池电量不足时发送通知:

  1. 您没有指定优先级,因此数据消息的默认优先级是“正常”:

默认情况下,通知消息以高优先级发送,数据消息普通优先级发送。正常优先级可优化客户端应用程序的电池消耗,除非需要立即交付,否则应使用此优先级。对于具有正常优先级的消息,应用程序可能会以未指定的延迟接收消息

  1. 您将“time_to_live”指定为 0,这意味着如果 FCM 未能立即传递消息,它将永远不会被传递(因为它没有保存在 FCM 存储中)。

因此,将“正常”优先级与 0 的“time_to_live”结合起来可能会阻止在电池电量不足时传递消息。

要尝试克服此问题,您可以将优先级设置为“高”:

{
    "to" : "XXXDecviceToken",
     "data" : {
         "callId" : "Call ID",
         "displayName" : "Abhilash", 
         "room" : "2000"
     }, 
     "time_to_live" : 0,
     "priority" : "high"
}

或将“time_to_live”更改为正值(至少有足够的时间让消息在电池重新充电后有机会传递)。


推荐阅读