【问题标题】:Joining XMPP MUC Room without invite - ejabberd无需邀请即可加入 XMPP MUC Room - ejabberd
【发布时间】:2016-12-26 23:44:11
【问题描述】:

对于持久性 XMPP 房间,如果客户端断开连接一次,如何让客户端重新加入房间?在测试过程中,我发现简单地将存在节发送回所述房间的 JID 不会使客户端再次在房间中可用。是否只有在用户收到邀请时才会重新进入房间(因此,在我们的例子中,如果用户断开连接一次,用户将需要另一个邀请才能加入房间?)?

如果是这样,那么为重新连接的原始房间参与者自动生成此类邀请的最佳方式是什么?

谢谢。

【问题讨论】:

  • 没有邀请我不认为这是可能的,但你可以设置一个监听器并邀请离开的用户回到房间。
  • 感谢@MoatezBouhdid - 也尝试手动发送邀请,但离开的用户就是不会加入! :-(
  • 能够让用户在没有邀请的情况下重新加入 - 只需在正确的地方重新加入......

标签: xmpp ejabberd xmppframework multiuserchat


【解决方案1】:

使用 pubsub 功能和相关 MultiUserChat 书签 的最佳方式。 如果您需要某些因您的特殊需要而被拒绝的东西,您可以开发一个自定义书签管理器。

您是否需要以下步骤:

1) 创建永久群聊时,请在首次加入后为群聊添加书签。 (=> 保存在数据库群聊名称和密码上)

2) 收到邀请时,在第一次加入后为群聊添加书签(=> 保存在数据库群聊名称和密码上)

3) 在登录/重新连接时检索书签列表

4) Foreach 书签 -> 加入(并分配监听器等)

5) 提供删除书签条件(基于时间戳、会话、显式请求等)。

Official specifications

【讨论】:

  • 非常感谢@MrPk - 是的,我正在努力实现同样的目标。加入失败是您步骤中的#4。即使我向所述用户发送新邀请,他/她似乎也无法从他/她本地保存的书签中重新加入房间(其中只包含早期加入房间的 JID 列表(因为我没有存储密码) )。
  • 您实际上不需要再次发送邀请,理论上您可以强制加入,就像成功接受邀请请求一样。当然检查 MUC 是否有密码(如果有,你不能在不重新插入的情况下加入)广告房间配置寻找不寻常的参数组合。我基于 Openfire + Smack API 使用这种方式,但它不依赖于实现
  • 好吧 - 它奏效了 - 我正在强制重新加入应用程序启动后而不是身份验证后!非常感谢您的意见...
【解决方案2】:

有一个proposed XEP,它在支持订阅的最新 ejabberd 中实现。它将 MUC 房间暴露为 pubsub 节点,以引入 MUC 房间订阅者的概念。

【讨论】:

  • 谢谢@Sabbir ...是的,我一直在玩新的 MUC/Sub 模块,但在那里也遇到了同样的问题...除非我能让房间参与者重新加入房间,我找不到利用订阅的机制。不确定您是否还有其他想法...?
  • 找到解决方案 - 我在错误的地方重新加入!
猜你喜欢
  • 2018-10-07
  • 2017-01-20
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多