我正面临使用来自 XMPP Mongoose 服务器的 smack api 在 android 应用程序中检索离线消息的问题。根据代码流尝试在用户登录 xmpp mongoose 服务器时检索离线消息,然后再将可用状态发送到 mongoose 服务器。
尝试了两种不同的方式来检索离线消息仍然无法找到相同的工作解决方案。我尝试过的这两种方法都在下面详细解释。
在我们用于 xmpp 连接和所有其他扩展的 Api 下方:
// Smack(XMPP 客户端库)</p>
编译'org.igniterealtime.smack:smack-android:4.1.6'
编译'org.igniterealtime.smack:smack-tcp:4.1.6'
编译 'org.igniterealtime.smack:smack-im:4.1.6' </p>
编译'org.igniterealtime.smack:smack-android-extensions:4.1.6'
尝试使用 offlineMessageManager 检索离线消息
下面是我在登录后和将可用状态发送到服务器之前尝试检索离线消息的代码
试试 { </p>
Boolean isFelxibleRetrievalSupport = offlineMessageManager.supportsFlexibleRetrieval(); </p>
迭代器 i = (迭代器) offlineMessageManager.getMessages(); </p>
而 (i.hasNext())
{ 消息消息 = i.next(); System.out.println("得到文本 [" + msg.getBody() + "] 从 [" + msg.getFrom() + "]");
} 捕捉(XMPPException e)
{ System.out.println("错误离线消息。"); e.printStackTrace(); }
捕捉(SmackException.NotConnectedException e)
{ System.out.println("错误离线消息。无连接"); e.printStackTrace(); }
捕捉(SmackException.NoResponseException e)
{ System.out.println("错误离线消息。无响应"); e.printStackTrace(); }
问题案例1:
以下是执行上述代码时生成的异常详细信息
在下面的代码行执行时出现异常。
迭代器 i = (迭代器) offlineMessageManager.getMessages(); </p>
以下是上述行执行时生成的异常描述
org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: service-unavailable - 取消
问题案例 2:
如果检查是使用来自 xmmp mongoose 服务器的 smack 从 android 代码支持的灵活离线消息,那么我得到了错误值。下面是我用于测试的代码。
Boolean isFelxibleRetrievalSupport = offlineMessageManager.supportsFlexibleRetrieval();
问题案例 3:
当我尝试使用下面的 smack 代码使用下面的方法检索支持的功能时。
ServiceDiscoveryManager 经理 = ServiceDiscoveryManager
.getInstanceFor(连接);
列出 AllFetures = manager.getFeatures();
以下是我检索的功能列表:
http://jabber.org/protocol/bytestreams ,
jabber:iq:privacy, urn:xmpp:ping,
http://jabber.org/protocol/commands ,
jabber:智商:版本,
jabber:智商:最后,
http://jabber.org/protocol/xdata-validate,
http://jabber.org/protocol/xhtml-im ,
电子名片温度,
http://jabber.org/protocol/chatstates ,
瓮:xmpp:收据,瓮:xmpp:时间,
http://jabber.org/protocol/xdata-layout ,
http://jabber.org/protocol/muc ,
http://jabber.org/protocol/disco#items ,
http://jabber.org/protocol/disco#info ,
http://jabber.org/protocol/caps ,
jabber:x:数据
尝试使用来自 XMPP MongooseIM 的包侦听器检索离线消息
下面是我尝试使用来自 smack api 4.1.6 的包侦听器的代码。
private static final StanzaFilter MESSAGE_PACKET_FILTER= new OrFilter(StanzaTypeFilter.MESSAGE);
配置 = XMPPTCPConnectionConfiguration.builder()
.setServiceName(SERVICE_NAME)
.setHost(KDevelopmentXMPPServer)
.setPort(PORT)
.setSendPresence(false)
.build();
// 使用配置的详细信息创建 xmpp 连接的 Connection 对象
连接 = 新 XMPPTCPConnection(配置);
connection.addAsyncStanzaListener(新的 StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
Log.d("CheckPacket", "OfflineMEssage");
Message message = (Message) packet;
if (message != null) {
if (message.getBody() != null) {
Log.i("XMPPClient", "Got text [" + message.getBody()
+ "] from [" + message.getFrom() + "]");
}
}
}
}, MESSAGE_PACKET_FILTER);
connection.login(用户,密码);
提前致谢,请任何人帮助我为我的关键问题找到最佳工作解决方案。