android - XMPP aSmack MultiUserChat 服务器继续发送已收到的消息

标签 android xmpp asmack

我是堆栈上的新用户,但我在 aSmack 库 3.2.1 for android 中遇到 MultiUserChat 问题。我正在使用“gtalk.google.com”服务器。这是一个简单的例子,我只是一个在场的人:

 String room="myConference@conference.jabber.org";
 MultiUserChat muc = new MultiUserChat(connection,room);
 muc.join(userNameInRoom);

 muc.addMessageListener(new PacketListener()
 {
    @Override
    public void processPacket(Packet packet)
    {
         ...
    }
 });

之后:

 muc.sendMessage("Text message");

在日志中:

DEBUG/SMACK(281): 06:46:29 PM SENT (1140866576): <message id="gsMe7-18"
to="myConference@conference.jabber.org" type="groupchat"><body>Text message
</body></message>

DEBUG/SMACK(281): 06:46:29 PM RCV  (1140866576): <message
from="myConference@conference.jabber.org/userNameInRoom" to="userName"
type="groupchat"><body>Text message</body></message>

结果:“短信”是正确的,但随后:

我又收到了“短信”:

DEBUG/SMACK(281): 06:54:12 PM RCV  (1140866576): <presence 
from="myConference@conference.jabber.org/userNameInRoom" to="userName"><x xmlns=
"vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user">
<item affiliation="owner" role="moderator"/><status code="110"/></x></presence>

DEBUG/SMACK(281): 06:54:12 PM RCV  (1140866576): <message 
from="myConference@conference.jabber.org/userNameInRoom" to="userName"
type="groupchat"><body>Text message</body><delay stamp="2012-02-15T17:46:31Z" 
from="myConference@conference.jabber.org" xmlns="urn:xmpp:delay"/><x 
stamp="20120215T17:46:31" from="myConference@conference.jabber.org" 
xmlns="jabber:x:delay"/></message>

每当服务器向我发送状态时,我都会一次又一次地收到。它以约 5 分钟的间隔无限地继续。是的,30 分钟后我收到了 ~6 条消息“短信”。如果我发送超过 1 条消息,所有这些消息都会在状态发送给我时无一异常(exception)地收到。

我的 MultiUserChat 有什么问题,这里的延迟交付是怎么回事?

感谢关注!

最佳答案

在“@conference.jabber.org”的情况下,我没有找到解决方案,我决定这个问题是因为 GTalk 服务器和 MultiUserChat 的正确版本是在“@groupchat.google.com”的情况下。

我更改了我的代码:

room=roomName+"@conference.jabber.org";
MultiUserChat muc = new MultiUserChat(connection, room);

muc.create(userName);

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));

到:

room="private-chat-" + UUID.randomUUID().toString() + "@groupchat.google.com";
MultiUserChat muc = new MultiUserChat(connection, room);

muc.join(userName);

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));

我试过了,但我遇到了新问题 - 当用户收到邀请消息并接受它时,两个客户端都崩溃并出现 XmlPullException“END_TAG expected” 和类似“”的内容logcat 中的最后位置。

我开始用谷歌搜索这个问题并找到了原因。我使用了 beem 客户端的 asmack(顺便说一句,在此之前我使用了 asmack 开发人员的 asmack-7),我怎么知道它是基于 smack 3.1 的……我发现 smack 3.2.0 决定了这个问题。我下载了 Flow's version asmack,我对此很满意。

最后我想说声“谢谢!!!”到 Flow 以获得正确版本的 aSmack,它比其他版本效果更好。

关于android - XMPP aSmack MultiUserChat 服务器继续发送已收到的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299405/

相关文章:

android - 是否有任何 AlertDialog 替代服务?

java - 击打: "Trust anchor for certification path not found"

xmpp - Strope.js - 如何获得一组名单及其成员?

android - 为什么我在 Maven Central 找不到 aSmack?

android - 无法保持来自粘性服务 android 的持久 XMPP 连接

android - 将自定义 View 放置在 ConstraintLayout 中

android - 三星应用和 Google AdMob

android - 如何使用 adb(没有 IDE)android 调试我的应用程序

node.js - 通过网络以最低延迟控制 Arduino

java - asmack - 无法读取 VCard