J. *_*ers 16 android android-notifications firebase firebase-cloud-messaging
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我将Apple和Android优先级设置为"高"(/ 10).在iOS上,所有消息都会立即传递.然而,在Android上并非如此.消息最多需要5分钟才能到达手机.我认为这可能是一个优先问题,因为文件说明:
高度优先.FCM尝试立即传递高优先级消息,允许FCM服务在必要时唤醒休眠设备并运行一些有限的处理(包括非常有限的网络访问).
到现在为止还挺好.我将优先级设置为高.但文件进一步指出:
高优先级消息通常会导致用户与您的应用互动.如果FCM检测到他们没有的模式,则可能会对您的消息进行去优先级排序.
我发送到设备的所有消息都需要与手机进行交互.但我所有的消息都是无声的消息.也许FCM认为我的消息不需要用户交互,因此优先级较低.
有谁知道如何解决这个问题?
编辑:我测试了Android三星Galaxy S7和谷歌Pixel 2.
小智 1
您无权访问 FCM 将消息传送到设备的方式。仅仅因为您将消息标记为高优先级并不意味着它是应该立即传递的高优先级消息。
FCM 将观察您的通知/FCM 消息的交互性。如果用户通常不坚持与他们进行交互,FCM 将会降低您的消息的优先级,从而导致传递时间更长。
FCM 在用户体验方面具有侵入性...FCM 的创建方式是为了不让用户接触到不相关的数据。将其视为一个广告拦截器,可以让您避免打扰用户。
查看 FCM 的官方文档了解其工作原理。
https://firebase.google.com/docs/cloud-messaging/concept-options