我正在使用aSmack库与远程xmpp服务器进行通信.我能够发送/接收消息,但我想获取传入消息的时间戳.
你能告诉我,它有可能吗?因为我找不到关于这个问题的任何信息.
提前致谢
我正在尝试调整这里为Smack 4.1.0 提供的示例.并有点困惑.
具体来说,我很难理解GcmPacketExtension现在应该扩展什么,构造函数应该如何工作以及如何更新Providermanager.addExtensionProvider以配合它.
我敢肯定以前有人必须这样做但是我找不到任何例子,而且我似乎只是使用文档进行圈选.
任何帮助将不胜感激,我相信答案很简单!
当前代码(正在编译但未运行):
static {
ProviderManager.addExtensionProvider(GCM_ELEMENT_NAME, GCM_NAMESPACE, new ExtensionElementProvider<ExtensionElement>() {
@Override
public DefaultExtensionElement parse(XmlPullParser parser,int initialDepth) throws org.xmlpull.v1.XmlPullParserException,
IOException {
String json = parser.nextText();
return new GcmPacketExtension(json);
}
});
}
Run Code Online (Sandbox Code Playgroud)
和:
private static final class GcmPacketExtension extends DefaultExtensionElement {
private final String json;
public GcmPacketExtension(String json) {
super(GCM_ELEMENT_NAME, GCM_NAMESPACE);
this.json = json;
}
public String getJson() {
return json;
}
@Override
public String toXML() {
return String.format("<%s xmlns=\"%s\">%s</%s>",
GCM_ELEMENT_NAME, GCM_NAMESPACE,
StringUtils.escapeForXML(json), GCM_ELEMENT_NAME);
}
public …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个聊天应用程序
但有时,当连接丢失时,Smack重新连接管理器停止工作.
我无法找出造成这个问题的原因.
当我检查我的手机后,经过12到14小时的延迟,我可以看到Android服务仍在运行,但XMPP重新连接已停止工作.然后我必须强制停止应用程序,然后重新启动服务并再次连接到XMPP服务器.
我的假设是当"电话网络从Wifi到数据或数据到Wifi"切换时.与此同时,Smack 4.1重新连接管理器停止工作.虽然,我不确定.
我有问题
任何其他解决方案来解决这个问题?我在考虑以下解决方案:
我正在android中开发一个聊天应用程序.使用XMPP服务器.PHP服务器已迁移到ejabber.
我的通知在所有情况下都能正常运行 但在一个案例中,我正在丢失XMPP消息.事实上我没有收到通知.
详细说来,我正在关闭WiFi或数据连接.关闭WiFi或数据连接后,发送给我的任何通知都没有收到.在我打开WiFi或数据连接后,我无法收到发送给我的消息.
我已经在后台实施了服务.这使得xmpp连接永远存在.
我关闭WiFi连接时收到此错误.
java.net.SocketException: sendto failed: EPIPE (Broken pipe)
java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506)
at libcore.io.IoBridge.sendto(IoBridge.java:475)
at java.net.PlainSocketImpl.write(PlainSocketImpl.java:508)
at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:270)
at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
at java.io.BufferedWriter.flush(BufferedWriter.java:124)
at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:286)
at org.jivesoftware.smack.PacketWriter.access$12(PacketWriter.java:270)
at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:137)
Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe)
at libcore.io.Posix.sendtoBytes(Native Method)
at libcore.io.Posix.sendto(Posix.java:146)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
at libcore.io.IoBridge.sendto(IoBridge.java:473)
... 9 more
at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552)
at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
at java.io.InputStreamReader.read(InputStreamReader.java:244)
at java.io.BufferedReader.read(BufferedReader.java:310)
at org.jivesoftware.smack.XMPPConnection$AliveReader.read(XMPPConnection.java:1122)
at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1496)
at …
Run Code Online (Sandbox Code Playgroud) 我在这里使用了很棒的帖子设置了一个xmpp服务器和android客户端...我在xmpp服务器中设置了一些预先定义的用户,我可以使用这些凭据登录.
现在,从我的应用程序,我想通过Android客户端注册为xmpp服务器的新用户.任何人都可以建议我如何实现这一目标......任何帮助都将受到赞赏...... !!!
我正在开发一个通过XMPP接收推送通知的应用程序(我知道C2DM,但它有一些限制,我不能因为它而使用),问题是连接一段时间后被垃圾收集而且我不能向Android设备发送推送通知.
我想我需要实现一个Android服务,但我不知道如何实现一个能保持连接活动的服务.有人可以帮帮我吗?
我正在使用smack开发Facebook聊天应用程序.
我试图将我的应用程序从转移aSmack
到Smack 4.1.1
.但是我在使用相同的服务器和登录详细信息时遇到麻烦,而在aSmack上它运行良好.
这是我的旧登录代码aSmack
-
void startConnect(boolean sslFlag) throws XMPPException, SmackException, IOException {
ConnectionConfiguration connectionConfig =
new ConnectionConfiguration(HOST, Integer.parseInt(PORT), SERVICE);
connectionConfig.setDebuggerEnabled(true);
connectionConfig.setCompressionEnabled(false);
if (sslFlag)
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
XMPPConnection connection = new XMPPTCPConnection(connectionConfig);
connection.connect();
connection.login(mUserName, mUserPassword, getResource());
// Set status to online / available
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
setConnection(connection);
}
Run Code Online (Sandbox Code Playgroud)
我也试图在类似的时尚上使用代码Smack
-
public void init() {
SmackConfiguration.DEBUG = true;
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setHost(SERVICE_NAME)
.setPort(5222)
.setServiceName(SERVICE_NAME)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setDebuggerEnabled(true)
.build();
mConnection = new XMPPTCPConnection(config);
//I have …
Run Code Online (Sandbox Code Playgroud) 我使用smack构建一个小型XMPP客户端/机器人时遇到了一种非常奇怪的行为.我设置了连接以及ConnectionListener和ChatManagerListener.这很好用,然后我可以与我在便携式设备上运行的应用程序聊天.
为了测试丢失连接的行为,我插上了便携式设备的以太网电缆.我希望XMPP客户端丢失连接,并且用户将在用户好友的名单中设置为"离线".会发生什么,该用户仍显示为"在线",而我的客户端的ConnectionListener不会触发任何内容,无论是connectionClosed还是reconnectionFailed,否则.
当我再将以太网电缆插入时,有时它就像连接一直处于活动状态.处理离线消息,我可以像以前一样再次聊天.其他时候我的客户完全无法进入并且无序,看起来所有的听众都已经不在了......但是没有引发任何激动.
这是一个非常奇怪和无法控制的行为,会使整个客户端无法使用,因为我无法确定客户端是否会在连接被取消后再次出现.
有没有其他人遇到过这样的问题或有任何暗示(不)发生的事情?
如果需要,我可以提供我的代码,但它实际上只是从Smack文档中复制和粘贴.