Firebase云消息传递+Android:静默通知的优先级

20
TLDR:通过FCM发送到Android设备的消息需要10秒到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上进行了测试。


2
你的目标版本是哪个?你测试使用哪些设备? - Xenolion
@Xenolion 我的目标是针对最新版本,即Android 27进行测试。我已经在Google Pixel 2和Galaxy S7上进行了测试。我已将这些信息添加到问题中。 - J. Hesters
你有关于这个问题的更多消息吗?我也遇到了完全相同的问题。 - swalkner
@swalkner 很抱歉我回复晚了。我没有太关注我的收件箱。不,我没有能够解决这个问题。我们公司最终做的是将所有消息都作为响亮的通知发送。这是一个不好的解决方案,但比通过套接字将实时数据发送到设备之类的操作要好。 - J. Hesters
@J.Hesters:我建议您在生成的JSON中始终使用双引号,即",或者只使用一个符号'",而不是两者混合使用。因为尽管在Python中这样做是可以的,但在其他语言中可能无法正常工作。 - Akram
@J.Hesters,你改了什么使得所有通知都变得响亮了?你能发一下你的解决方案吗? - sebasira
1个回答

1
您无法访问FCM将消息传递到设备的方式。仅因为您将消息标记为高优先级并不意味着它是应立即传递的高优先级消息。
FCM将观察您的通知/FCM消息的互动性。如果用户通常不与它们进行交互,FCM将降低您的消息优先级,从而延长传递时间。
FCM在UX方面具有侵入性...... FCM以一种不会向用户公开无关数据的方式创建。将其视为一个AdBlocker,使您远离干扰用户的工具。
请查看FCM的官方文档以了解其工作原理。

https://firebase.google.com/docs/cloud-messaging/concept-options


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接