向ios发送推送通知,以便与离线用户openfire xmpp进行聊天

sha*_*esh 17 chat xmpp openfire push-notification ios

我有一个使用openfire的ios聊天应用程序,我需要做的是当消息(1)因任何原因无法发送时发送推送通知,(2)app处于暂停状态,即无法生成通知在其自己的.

我已经在stackoverflow和其他地方阅读了大部分有关此问题的相关问题/建议,我已经为我的问题得出了一些解决方案.我不是ios开发人员,也不是几天前我对openfire或xmpp一无所知,所以我担心我对事情的理解可能不完整,我的解决方案可能存在缺陷.

请确认我对它的理解,并建议我是否遗漏了某些东西,或者是否有更好的方法.还请建议实施下面列出的特定解决方案的复杂程度.

这里的挑战是确定何时需要推送以及何时启动流程,所以

1)一种方法是使用xmpp的xep-0184实现来检查消息是否已传递.要做到这一点,我们应该在ios数据库中有一些带有消息的传递标志,当从另一端收到传递的响应时更新.因此,我们需要在一段时间后检查此标志,如果传递的状态为false,则使用该消息启动推送过程.看起来是一个复杂的解决方案(等待响应..检查标志有一些时间滞后..不是很令人印象深刻)

2)更直接的方法是在openfire中做一些事情,当openfire无法传递它将其存储在离线表中的消息时,我们可以对该部分进行一些拦截并使用消息启动推送过程.这看起来是正确的方法,但我真的害怕在openfire中获得那么多东西并改变一些东西(这可能也很容易,有人用openfire工作了一点可以说出来吗?)

3)这是我的最后一招,这不是解决方案......但如果我无法在预期的时间范围内(从现在起一周内)正确完成,我们计划发送所有消息的推送通知.oppenfire将关注正常聊天,同时从我们的服务器发送每个消息的推送但是当应用程序在前台时,我们做一些事情来处理不需要显示的额外推送消息,否则只要有一个推送就会收到推送信息.你们怎么看待这种临时的方式(我们当然必须尽快改变这一点),这是可行的(或者我在这里也遗漏了一些东西).

PS谁能告诉Whatsapp和其他流行的应用程序如何处理这个?

非常感谢您的帮助.

Ale*_*lex 6

在整个XMPP会话期间,XMPP需要持久套接字连接或"持久"BOSH连接.我认为您的挑战是iOS不允许您在后台运行您的应用和套接字.每当您的iOS应用程序进入后台时iOS都会终止您的套接字连接,并且您的Openfire服务器会终止您的XMPP会话.这意味着用户离线.这也是此用户的传入邮件进入脱机存储的原因.

很抱歉这个回复,但你建议的所有3个解决方案都是可怕的黑客;-).如果你想提出一个好的解决方案,你必须深入到XMPP和iOS.1周的时间非常短.

任何人都可以告诉Whatsapp和其他流行的应用程序如何处理这个?

他们使XMPP会话保持活力.这仅适用于经过高度修改的XMPP服务器,其间有一些"XMPP客户端代理",可在您的应用程序处于后台运行时保持会话运行,或两者兼而有之.

  • @Alex Wrong答案,什么应用程序使用服务器跟踪用户离线时使用推送通知,你不能让你的应用程序永远存在 (6认同)