标签: smack

如何获取传入的xmpp消息的时间戳?

我正在使用aSmack库与远程xmpp服务器进行通信.我能够发送/接收消息,但我想获取传入消息的时间戳.

你能告诉我,它有可能吗?因为我找不到关于这个问题的任何信息.

提前致谢

android xmpp smack asmack

16
推荐指数
3
解决办法
1万
查看次数

使用Smack 4.1.0的GCM 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)

xmpp smack google-cloud-messaging server

16
推荐指数
1
解决办法
7777
查看次数

Smack 4.1重新连接问题

我正在开发一个聊天应用程序

  1. 我有一个持续运行的后台服务.
  2. 应用程序运行顺利,我能够毫无问题地接收和发送消息.
  3. 我正在使用默认的Smack 4.1重新连接管理器,它会在连接丢失后立即连接(几乎90%的时间).

但有时,当连接丢失时,Smack重新连接管理器停止工作.

我无法找出造成这个问题的原因.

当我检查我的手机后,经过12到14小时的延迟,我可以看到Android服务仍在运行,但XMPP重新连接已停止工作.然后我必须强制停止应用程序,然后重新启动服务并再次连接到XMPP服务器.

我的假设是当"电话网络从Wifi到数据或数据到Wifi"切换时.与此同时,Smack 4.1重新连接管理器停止工作.虽然,我不确定.

我有问题

  1. PingManager有什么用?PingManager在这种情况下可以提供帮助吗?
  2. 什么是StreamManagement?我该如何启用它?这种情况有用吗?

任何其他解决方案来解决这个问题?我在考虑以下解决方案:

  1. 要使用GCM以及XMPP,所以当XMPP无法重新连接时,我可以获得PUSH并在PUSH的基础上再次连接.
  2. 使用警报服务.(问题:由于连接丢失而在队列中的消息将取决于下一个警报计划)
  3. 每次用户返回应用程序时连接XMPP.(问题:因连接丢失而在队列中的消息将取决于用户返回应用程序)

java sockets android xmpp smack

16
推荐指数
1
解决办法
1820
查看次数

在切换数据连接时,Android上的XMPP消息丢失(例如,转动Wifi,GSM < - > Wifi切换)

我正在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)

android xmpp smack asmack

15
推荐指数
1
解决办法
2404
查看次数

Smack和aSmack有什么区别?

我无法在Android 上使用Smack,而aSmack完美无缺?当比较源代码时,它看起来有点相似,差异来自哪里?

Smack和aSmack有什么区别?

android xmpp smack asmack

13
推荐指数
2
解决办法
7196
查看次数

如何使用(a)Smack库在XMPP上注册新用户

在这里使用了很棒的帖子设置了一个xmpp服务器和android客户端...我在xmpp服务器中设置了一些预先定义的用户,我可以使用这些凭据登录.

现在,从我的应用程序,我想通过Android客户端注册为xmpp服务器的新用户.任何人都可以建议我如何实现这一目标......任何帮助都将受到赞赏...... !!!

android xmpp smack

13
推荐指数
3
解决办法
1万
查看次数

在Android上保持XMPP连接(使用asmack)

我正在开发一个通过XMPP接收推送通知的应用程序(我知道C2DM,但它有一些限制,我不能因为它而使用),问题是连接一段时间后被垃圾收集而且我不能向Android设备发送推送通知.

我想我需要实现一个Android服务,但我不知道如何实现一个能保持连接活动的服务.有人可以帮帮我吗?

android xmpp push keep-alive smack

12
推荐指数
1
解决办法
9803
查看次数

如何使用smack获取facebook用户的移动在线状态?

我正在使用smack开发Facebook聊天应用程序.

  1. 在这里,我想获得移动用户和网站用户的在线用户状态,以及如何区分这两者.
  2. 如果用户发送消息,我如何区分他是移动用户(或)网站用户?

java smack

12
推荐指数
1
解决办法
245
查看次数

使用PLAIN的SASLError:未经授权

我试图将我的应用程序从转移aSmackSmack 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)

android xmpp smack asmack

12
推荐指数
3
解决办法
2万
查看次数

Smack客户端 - 尽管连接中止,用户仍处于"在线"状态

我使用smack构建一个小型XMPP客户端/机器人时遇到了一种非常奇怪的行为.我设置了连接以及ConnectionListener和ChatManagerListener.这很好用,然后我可以与我在便携式设备上运行的应用程序聊天.

为了测试丢失连接的行为,我插上了便携式设备的以太网电缆.我希望XMPP客户端丢失连接,并且用户将在用户好友的名单中设置为"离线".会发生什么,该用户仍显示为"在线",而我的客户端的ConnectionListener不会触发任何内容,无论是connectionClosed还是reconnectionFailed,否则.

当我再将以太网电缆插入时,有时它就像连接一直处于活动状态.处理离线消息,我可以像以前一样再次聊天.其他时候我的客户完全无法进入并且无序,看起来所有的听众都已经不在了......但是没有引发任何激动.

这是一个非常奇怪和无法控制的行为,会使整个客户端无法使用,因为我无法确定客户端是否会在连接被取消后再次出现.

有没有其他人遇到过这样的问题或有任何暗示(不)发生的事情?

如果需要,我可以提供我的代码,但它实际上只是从Smack文档中复制和粘贴.

java connection xmpp reconnect smack

11
推荐指数
1
解决办法
4472
查看次数