在 XMPP 中获取离线消息
Posted
技术标签:
【中文标题】在 XMPP 中获取离线消息【英文标题】:Get Offline messages in XMPP 【发布时间】:2012-11-02 11:23:13 【问题描述】:在我的聊天应用程序中,我想在用户登录时获取离线消息(如果有人向他发送消息)。当用户处于在线状态并且在用户重新登录后无法获取消息时,我会收到通知。我也检查了 xmpp 日志猫。我可以在那里阅读离线消息,但我无法通知用户他/她的离线消息。
这是我在服务的 onStart 中使用的监听器(服务在用户登录时立即启动)
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
final PacketCollector collector = connection.createPacketCollector(filter);
connection.addPacketListener(new PacketListener()
@Override
public void processPacket(Packet packet)
// TODO Auto-generated method stub
//notification(packet.getFrom());
packet = collector.nextResult();
Message message = (Message)packet;
senderName = packet.getFrom();
int alphaPOS = senderName.indexOf("@");
String subSenderName = senderName.substring(0,alphaPOS);
if(UserChatActivity.checkPresence==false)
notificationforChat(subSenderName+": "+message.getBody(),packet.getFrom().toString());
, filter);
当用户在线时,这可以正常工作。但我希望一旦用户登录,他应该被通知他的消息
谢谢
【问题讨论】:
【参考方案1】:您必须确保您的 XMPP 服务器支持 XEP 0136,这是 XMPP 的消息归档扩展。
该扩展名将解释如何检索已归档的消息。
对于ejabberd,您可以为此安装和配置the mod_archive extension。它将消息保存到 SQL 后端。
【讨论】:
感谢 helo @JC Brand。以上不能是一个解决方案吗?许多程序员已经实现了上述一项。 Log cat 也显示离线消息。我见过我自己。谢谢 如果您只想在用户离线时将消息发送给他/她,那么我认为这在很大程度上取决于您的 XMPP 服务器。我使用 ejabberd,一旦用户登录它就会立即发送离线消息。 好的,感谢您的帮助。好的,你的手段是你的好,但我认为它是相反的。我们可以用上面的或离线消息管理器类型的任何其他方式来做吗? @JCBrand 你有什么解决方案吗??【参考方案2】:更改过滤器以过滤 Message.class 类型的消息而不是聊天消息,因为离线消息不是聊天类型(我不认为)
PacketFilter filter = new PacketTypeFilter(Message.class);
看看你的表现。
实际上是在重新阅读您的问题;您是说您可以在 LogCat 中看到正在接收的离线消息,但在屏幕上看不到?您在哪里记录收到的消息?
【讨论】:
以上是关于在 XMPP 中获取离线消息的主要内容,如果未能解决你的问题,请参考以下文章