从 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 流,而不是在我将存在发送到流之后(存在类型 =“可用”) 这里是一个包含历史标签的示例数据包......所以我想看看从你这边发送的存在数据包。请记录数据包并分享。 房间加入数据包的“maxchars”或“maxstanzas”或“seconds”属性,此属性定义消息数或秒数(持续时间),即消息限制。根据消息限制,消息当用户连接到房间时检索。例如 maxchars = 2 然后房间流在成功连接到房间后返回最后 2 条消息。 【参考方案1】:

您必须指定您的 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 时获取所有组消息的主要内容,如果未能解决你的问题,请参考以下文章

wifi-direct端连接到Android上的对等点?

当后端连接到 wordpress 时如何向设备发送通知?

我的 iOS 应用程序在 IPv6 下运行良好,但连接到 XMPP 是错误的。 Android没有错误

从 android 连接到 XMPP 服务器

从后端连接到外部数据库

如何在 iOS 的 XMPP 框架中设置资源