我使用以下软件进行Android聊天应用程序
-
XMPP服务器:Openfire 3.9.3
-
XMPP客户端:Asmack-android-8-4.0.4.jar
当我手动更改登录用户的存在时,我正面临一些Openfire服务器的奇怪行为 .
下面是我班上的一段代码
xmppConfig.setSendPresence(false);
// Call first time only while configuration connection
presence = new Presence(Type.available, Constant.STATUS_ONLINE, 1, Mode.available);
// Code to change the presence of user
connection.sendPacket(presence);
正常日志,我可以更改用户的存在(我在Openfire门户上检查过它的工作方式已被接受):
SENT (1): <presence id='z13q2-27'><status>online</status></presence>
RCV (1): <presence id="z13q2-26" from="rayan@**********.com/Smack"
to="rayan@**********.com/Smack"><status>online</status></presence>
经过一段时间(2-3)小时,当我回到应用程序并尝试在线设置状态时(我检查了Openfire门户网站,即使我将在线状态设置为在线状态,此用户也会显示离线状态) .
SENT (1): <presence id='z13q2-27'><status>online</status></presence>
//**** No packet replay of change presence *********
我在上面的场景之后检查了下面的值来检查用户是否仍然连接,但是我得到了以下结果,表明连接是活动的并且用户仍然连接,但同时Openfire(web)门户是显示用户离线,
xmppManager.getConnection().isConnected() //Result(true)
xmppManager.getConnection().isAuthenticated() //Result(true)
xmppManager.getConnection().isAnonymous() //Result(false)
在上述情况之后,我无法向某人发送消息或接收消息 .
SENT (0): <message id='9388u-21' to='rayan@*********.com' type='chat'>
<subject>nullMedia</subject><body>Test message</body><custom_data>
<aliasNmae>Robine H.</aliasNmae><profilePicUrl></profilePicUrl>
</custom_data><request xmlns='urn:xmpp:receipts'/></message>
以上是我在上述场景后发送消息时的日志,这里 <custom_data>
是我的自定义扩展 .
即使我在Openfire中检查历史记录,在上述方案之后也没有存储消息 .
我不确定是否有一个选项来维护Openfire服务器(Web门户)上的长期连接,或者我在这里使用XMPP客户端做错了什么 .
如果有人对这种奇怪的情况有所了解,请指导我 .
1 回答
不,这些只是表明Smack没有意识到连接断开 . 在没有图书馆注意的情况下,连接可能会被破坏的原因有很多 .
如果要可靠地检查连接是否处于活动状态,请使用PingManager.pingMyServer() .