TLDR:通过FCM发送到Android设备的消息需要10秒到5分钟才能发送.可能是由于优先权.我把它设置为"高",但似乎它不会保持这个价值.
我为iOS和Android开发了一个应用程序.我的后端运行在Django上.对于我们的实时通信,我们最近开始使用Firebase云消息传递(FCM).
我成功地设法连接Django服务器,并能够向这两种设备发送消息.
这是我构建消息的python代码.请注意,令牌数据会在以后动态添加,并且消息是静默通知.
def _build_silent_message(not_id, data):
"""Construct silent notifiation message.
Silent means that this message won't show up in the notifications hub
of the app.
"""
return {
'message': {
'data': {"data": data},
'apns': {
'payload': {
"notId": not_id, # notId HAS TO BE FIRST!!!
'aps': {
'content-available': 1
}
},
'headers': {
'apns-priority': '10'
},
},
'android': {
'priority': "high",
'data': {
"androidData": data,
'content-available': '1'
}
}
}
}
如您所见,我将Apple和Android优先级设置为"高"(/ 10).在iOS上,所有消息都会立即传递.然而,在Android上并非如此.消息最多需要5分钟才能到达手机.我认为这可能是一个优先问题,因为文件说明:
高度优先.FCM尝试立即传递高优先级消息,允许FCM服务在必要时唤醒休眠设备并运行一些有限的处理(包括非常有限的网络访问).
到现在为止还挺好.我将优先级设置为高.但文件进一步指出:
高优先级消息通常会导致用户与您的应用互动.如果FCM检测到他们没有的模式,则可能会对您的消息进行去优先级排序.
我发送到设备的所有消息都需要与手机进行交互.但我所有的消息都是无声的消息.也许FCM认为我的消息不需要用户交互,因此优先级较低.
有谁知道如何解决这个问题?
编辑:我测试了Android三星Galaxy S7和谷歌Pixel 2.