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服务在必要时唤醒Hibernate设备,并运行一些有限的处理(包括非常有限的网络访问)。
到现在为止,一直都还不错。我把优先权定得很高。但文件进一步指出:
高优先级消息通常会导致用户与应用程序交互。如果FCM检测到它们没有检测到的模式,您的消息可能会被取消优先级。
我发送到这些设备的所有信息都需要与手机进行交互。但我所有的信息都是无声的。也许FCM认为我的消息不需要用户交互,因此优先级较低。
有人知道怎么解决吗?
编辑:我用Android三星Galaxy S7和谷歌Pixel 2进行了测试。
您无法访问FCM向设备传递消息的方式。仅仅因为您将消息标记为高优先级并不意味着它是应该立即交付的高优先级消息。
FCM将观察您的通知/FCM消息的交互性。如果用户通常不与他们进行交互,FCM将取消您的邮件优先级,从而延长传递时间。
FCM在用户体验方面是侵入性的...FCM的创建是为了不让用户接触不相关的数据。把它想象成一个adBlocker,让你远离中断用户。
查看有关FCM工作原理的官方文档。
https://firebase.google.com/docs/cloud-messaging/concept-options
我们使用的是Firebase云消息。有时,当Android或iOS应用程序处于睡眠模式时,手机会收到相同(重复)的通知信息。对于设备标识,使用FIRInstanceID令牌。node.js上的一个外部服务器用于向Firebase服务发送通知。我们的服务器日志文件中没有出现重复的内容。
null 我遵循Xamarin的文档实现了这个功能。 然后一步一步地执行,直到下面的部分: 后台通知 我点击了Log Token按钮并收到了令牌。 null Firebase控制台显示消息为“完成”。 我错过了什么来解决这个问题?
我正在尝试使用Firebase Notification Composer向我的设备发送测试通知。我正在接收FCM令牌并将其打印到我的控制台,然后尝试向该令牌发送通知。 以下是我检查过的内容: 1) 我使用的是iOS 12.4.1 2) 我正在分配消息传递代理 3)我从委托方法接收FCM令牌 4) 我已经验证了通知是通过打印到控制台启用的,当提示我允许通知时,我单击了允许 5) 我已经验证了在Fi
我正在使用Firebase消息向iPhone应用程序的用户发送通知。为了不在客户端公开应用程序的消息服务器密钥,我正在使用Firebase的云功能向特定主题发送通知。在此之前,我在应用程序的客户端执行此操作,并能够通过制作以下格式的JSON来设置消息的优先级: 现在在我的云函数中,我试图制作一个相同通用格式的有效载荷,但是一直遇到错误: 以下是我的有效负载格式化和发送: 有谁知道我该如何设定优先级
为什么?下面是处理消息的官方代码
如何通过firebase云消息将通知从一台android设备发送到另一台设备?我不想使用firebase的管理面板来发送通知,我只想从一个设备发送到另一个设备。