TLDR:通过FCM发送到Android设备的消息需要10秒到5分钟才能被传递。可能是由于优先级问题引起的。我将其设置为“高”,但似乎它并没有保持在这个值上。
我开发了一个既能在iOS又能在Android上运行的应用程序。我的后端运行在Django上。我们最近开始使用Firebase Cloud Messaging(FCM)进行实时通信。
我成功地连接了Django服务器,并能够向两种类型的设备发送消息。
以下是构建消息的Python代码。请注意,令牌数据稍后动态附加,并且消息是静默通知。
你可以看到,我将苹果和安卓的优先级都设置为“高”(/ 10)。在iOS上,所有消息都会立即传递。然而,在安卓上并非如此。消息需要长达5分钟才能到达手机。我认为这可能是一个优先级问题,因为文档中指出:
我开发了一个既能在iOS又能在Android上运行的应用程序。我的后端运行在Django上。我们最近开始使用Firebase Cloud Messaging(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'
}
}
}
}
你可以看到,我将苹果和安卓的优先级都设置为“高”(/ 10)。在iOS上,所有消息都会立即传递。然而,在安卓上并非如此。消息需要长达5分钟才能到达手机。我认为这可能是一个优先级问题,因为文档中指出:
高优先级。FCM尝试立即传递高优先级消息,允许FCM服务在必要时唤醒睡眠设备并运行一些有限的处理(包括非常有限的网络访问)。
到目前为止还不错。我将优先级设置为高。但文件进一步说明:
高优先级消息通常应导致用户与您的应用程序交互。如果FCM检测到它们不会产生这样的模式,则可能会将其降低优先级。
我发送到设备的所有消息都需要与手机进行交互。但是,我的所有消息都是静默消息。也许FCM认为我的消息不需要用户交互,因此会给予较低的优先级。
有没有人知道如何解决这个问题?
编辑:我在安卓三星Galaxy S7和Google Pixel 2上进行了测试。
"
,或者只使用一个符号'
或"
,而不是两者混合使用。因为尽管在Python中这样做是可以的,但在其他语言中可能无法正常工作。 - Akram