Smack - 何时调用 MultiUserChat.Join(...)
Posted
技术标签:
【中文标题】Smack - 何时调用 MultiUserChat.Join(...)【英文标题】:Smack - When to call MultiUserChat.Join(...) 【发布时间】:2015-06-08 07:04:35 【问题描述】:我有点困惑,在docs 中找不到答案。 我正在为 android 开发一个简单的聊天应用程序。 我创建了一个组 (muc) 并且一切正常,但是我每次打开应用程序时都必须继续调用 join() 吗?
我注意到否则它不起作用.. 不明白为什么,因为服务器知道我的 jabberID 连接到这个 muc。
希望我的问题足够清楚。谢谢。
【问题讨论】:
【参考方案1】:一个(我希望)完整的解释:简短的回答是肯定的。
当在您的服务器上创建了一个永久房间,并且您注销或退出该房间时,您每次都必须重新加入。 注销或连接丢失是显而易见的,但是当您退出(离开)房间时,您也不会直接从房间收到消息(即使您仍然连接到服务器),服务器知道您的 id 是附属 与该 MUC(例如,作为成员),但您不在它内部,有关详细信息,请参阅 the XEP about MUC,并了解您的特定服务器如何在您的服务器文档(可能将消息保存在房间到离线用户下,或类似的东西)。
这基本上是 WhatsApp 在您进出群聊时发生的事情,但他们也有自己的自定义方式(他们在基本 xmpp 服务器之上构建的层)让您了解未读消息,即包括两者服务(您可以在手机的常规设置->应用中看到它)和推送通知。
【讨论】:
谢谢!正是我的意思。不过我不认为我会使用服务,这是一个很好的解决方案,因为您也无法在 ios 中实现后台服务,我想为两个平台开发相同的应用程序...... 这很好,在我的工作中,我们也没有使用服务,因为同样的原因(并行 IOS 应用程序),而是我们使用自己的 web 服务与 Parse 结合,以涵盖这一点,推送通知通常可以很好地创建用户-应用交互。【参考方案2】:-
创建服务
在其中添加您的 xmpp 代码,例如登录、一对一聊天、MUC 聊天。
因此,即使您的应用关闭服务也将保持在后台,并且您将始终连接到聊天室。
【讨论】:
我可以改用推送通知,但这不是我的问题。我问我是否应该只在创建 muc(或被邀请加入)时加入一次 muc,还是每次建立 xmpp 连接时(例如打开应用程序或启动手机时......) 是的,每次应用程序与服务器的连接松动时,您都必须加入,您必须保持与服务器的连接,这就是您需要实现服务的原因(在手机启动时创建广播监听器以启动您的服务进行初始化你的连接)以上是关于Smack - 何时调用 MultiUserChat.Join(...)的主要内容,如果未能解决你的问题,请参考以下文章
smack 4.1 processMessage 方法没有被调用
调用 XMPPTCPConnection.login (Smack-4.1.0) 时抛出 SmackException$NoResponseException