【问题标题】:How to get offline message of group chat from Openfire如何从 Openfire 获取群聊的离线消息
【发布时间】:2014-11-14 21:05:31
【问题描述】:

xmpp 中,当我的用户登录并加入房间时,我是否会收到 MultiUserChat 的 离线消息

我想像WhatsApp那样实现群聊,请问有其他实现方式吗

提前致谢

【问题讨论】:

    标签: android xmpp chat openfire groupchat


    【解决方案1】:

    至少在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());
    

    希望对你有帮助

    【讨论】:

    • 感谢回复,它给了我所有的群聊记录。
    • 如果这是解决方案,请将其标记为正确的:)
    • 嗨 lokesh 如何获取最后一条消息的时间戳请帮助我,我无法在群聊中获取离线消息
    • 嗨 zozelfelfo 我怎样才能得到我最后一条消息的时间戳请帮忙
    • @zozelfelfo 解决方案提供自组创建以来的所有组消息.. 知道如何仅在用户离开房间后获取这些消息吗?
    【解决方案2】:

    首先以这种方式声明一个 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 时,他都会收到该组的最后一条消息

    【讨论】:

    • 感谢回复,我试试这个,但它给了我群聊的所有消息
    猜你喜欢
    • 2015-12-22
    • 2019-09-23
    • 1970-01-01
    • 2015-05-31
    • 2016-12-09
    • 1970-01-01
    • 2015-10-25
    • 2017-03-16
    • 2015-04-18
    相关资源
    最近更新 更多