从 ios 和 android 端连接到 xmpp 时获取所有组消息
Posted
技术标签:
【中文标题】从 ios 和 android 端连接到 xmpp 时获取所有组消息【英文标题】:Getting All group messages back when connecting to xmpp from ios and android end 【发布时间】:2016-11-16 12:14:14 【问题描述】:我正在使用 openfire 4.0.1 版
使用 openfire Rest Api 我在服务 servicename.xx.xx.xxx.xxx 中创建了群聊室。
现在房间已创建,发生了什么,一旦用户连接到 xmpp 服务器,所有组消息都将接收回该用户,这会使应用程序卡住。
我在群聊设置下听说了群聊历史设置。
我已经截断了存储在 openfire ofMessageArchive 表中的所有群组消息。
不过,当用户连接到 xmpp 时,即使我已经清除了 ofMessageArchive 表中的所有消息,该用户仍会收到他所属的所有组的所有消息。
如何防止那些通过 xmpp 传递的消息?
任何帮助都会适用。
【问题讨论】:
有人遇到过同样的问题吗? 是的,我遇到了这个问题,你能分享你发送加入房间的出席信息包吗? @ShoaibAhmadGondal 我正在从 ios 端创建一个房间并创建 xmpp 的房间对象,然后将房间激活到我连接的 xmpp 流,而不是在我将存在发送到流之后(存在类型 =“可用”) 这里是一个包含历史标签的示例数据包......所以我想看看从你这边发送的存在数据包。请记录数据包并分享。您必须指定您的 Openfire 版本。
但是,对于 Openfire 4.0.2
群聊历史它基于数据库上的许多参数和客户端上的一些参数。 行为从来都不是线性的。
1) 在表OFPROPERTY
属性xmpp.muc.history.reload.limit
中(以天为单位,例如put 30 表示“过去30 天”)
2) 在表 OFMUCSERVICEPROP
中,对于每个 serviceid,您可以有(或没有)0+ 个值。例如,对于 serviceid 1 (conference
),如果没有参数,您将获得最后 25 条消息,或者您可以通过 db 设置或以编程方式命名 history.type
并键入 (all
以获取所有历史记录,none
用于你的情况)
3) 使用 smack API 您可以在加入聊天时发送 DiscussionHistory 请求:使用此对象,您可以将所有参数设置为 0(例如:节数等)。
history.type
这是要设置的***之一:只需将其声明为 none
并且不会检索任何历史记录。
【讨论】:
我正在使用 openfire 4.0.1 版本,正如你所建议的那样,我已在 OFMUCSERVICEPROP 表中将 history.type 更改为 none 并从 ios 端检查,但我仍然收到我所属组的所有消息从头到尾。您给出的另一个选项是 xmpp.muc.history.reload.limit,但我找不到任何名为 xmpp.muc.history.reload.limit 的属性。即使我尝试使用 xmpp.muc.history.reload.limit 插入新行并将该值设置为 0 仍然是我从 ios 端面临的相同问题。 好的,所以您可能在订阅请求中有一个默认的订阅历史记录。我没有提到这一点,因为您可能已经检查过了,但是如果您使用 API 其余部分,您可能没有详细检查订阅参数;顺便说一句,如果您在房间选项(群聊菜单 -> 选择服务 -> 选择房间)中禁用“记录对话”,理论上将无法检索任何历史记录 您说的是来自 ios 端的订阅请求中的默认值?是的,我正在使用 rest api 从房间中进行所有操作(添加/删除)成员,此功能是从 web 端完成的。我在那里看到了房间设置,我在创建房间时已经禁用了 Log Room Conversations(动态)。 roomsettings (prnt.sc/d8sfps) 默认房间设置 (prnt.sc/d8sg6u) 好的,你重置缓存了吗?也许它们来自缓存,或者有一些非常奇怪的东西...... 是的,我已尝试清除缓存 (prnt.sc/d9ua6i) 是否有其他方法可以清除缓存并停止接收所有群组消息?以上是关于从 ios 和 android 端连接到 xmpp 时获取所有组消息的主要内容,如果未能解决你的问题,请参考以下文章