如何从Openfire获取群聊的离线消息

时间:2014-09-20 10:53:45

标签: android xmpp chat openfire groupchat

当我的用户登录并加入会议室时,xmpp是否可以获得MultiUserChat的离线消息

我希望实施群聊,如WhatsApp,是否有其他方式可以实施此建议

提前致谢

2 个答案:

答案 0 :(得分: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());

希望有所帮助

答案 1 :(得分:0)

首先以这种方式声明MultiUserChat

  

private static 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,他将获得该组的最后一条消息