这是我上一个问题XMPP push notifications causing problems的更新。

多亏了MickaëlRémond的回答,延迟和重复问题都消失了,但我仍然无法理解推送通知的行为。


如果我将应用程序移到后台(没有锁定设备或终止),它将不会收到任何推送通知,并且当我将其放回前台时,所有消息都会被完美接收。
当应用程序处于前台并且我锁定了设备时,不会触发任何通知,但是会完美接收消息。
当应用程序处于后台并且我锁定了设备时,会触发通知,可以完美接收消息,但是有时在发送sendLastActivityQueryToJID之后会收到消息。


我不知道这是怎么回事,但是如果你们有什么想法,请告诉我。
PS我已经从我的应用程序中删除了背景模式。

最佳答案

它似乎与ejabberd无关,但似乎与推送通知在iOS上的工作方式有关。

我不确定您要做什么,但是您不应该删除应用程序的后台模式。无需这样做,还有很多其他好处,即允许该应用在后台模式下运行一小段时间,以执行适当的整理任务。


后台应用通常在被杀死之前会运行三分钟。这意味着在此期间,您会在应用内收到正常的XMPP消息。您必须在该状态下并在收到XMPP消息后从appm触发本地通知。
当应用程序处于前台时,iOS将永远不会显示任何通知。这是预期的。如果您连接到XMPP服务器,您将收到XMPP消息。如果未连接,您将收到通知,但不会显示。您可以在自己的应用中对它们进行处理。
您在这个问题上有些困惑:如果您的应用程序在后台运行,则会触发通知,但仅当您重新打开/重新连接到会话或重新连接时,才应同时收到消息。
如果您需要一些流量来接收消息,那是因为您没有在空白处保持活动。如果您不这样做,服务器将认为您突然失去了连接,并将开始发送推送通知和缓冲消息。确保按照文档中的建议实施空白保持活动,否则将无法正常工作。

10-05 22:57
查看更多