2

当我的用户登录并加入房间时,有什么方法xmpp可以让我收到MultiUserChat 的离线消息

我想像这样实现群聊WhatsApp,还有其他方法可以实现吗?请建议

提前致谢

4

2 回答 2

7

至少在ejjaberd您进入聊天组时,您必须输入您的最后一个时间戳,鉴于该时间戳您将从那一刻开始收到消息。

保存上一条消息的时间戳,以及进入房间时的时间戳,如下所示:

 MultiUserChat muc = new MultiUserChat(mConnection, room_name);
                Log.d(TAG, "JOINING => " + room_name);

                DiscussionHistory history = new DiscussionHistory();
                if (mLastMessageDate == null)
                    history.setMaxStanzas(300);
                else
                    history.setSince(mLastMessageDate); //timestamp from your last message

 muc.join(mNickName, null, history,
                            SmackConfiguration.getDefaultPacketReplyTimeout());

希望能帮助到你

于 2014-09-20T11:02:52.683 回答
0

首先以这种方式声明一个 MultiUserChat

私有静态 MultiUserChat muc = null;

然后在你的 oncreate 方法中以这种方式实例化它

muc = new MultiUserChat(CONNECTION, room);
        try {
            muc.join(USERJID);
        } catch (SmackException.NoResponseException e) {
            e.printStackTrace();
        } catch (XMPPException.XMPPErrorException e) {
            e.printStackTrace();
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        }

并在您的应用程序的开头调用此方法

void setMessageListner() {
        muc.addMessageListener(new PacketListener() {
            @Override
            public void processPacket(Packet packet) throws SmackException.NotConnectedException {
                Message msg = (Message)packet;
                msg.setSubject(msg,getBody);
                Logger.i("Received message  : "+msg.getBody()+" From "+msg.getSubject());
        });
    }

这样,每当用户进入 GroupChat 时,他都会收到该组的最后一条消息

于 2014-09-20T11:02:42.353 回答