Articles of xmpp

Smack 4.1重新连接问题

我正在开发一个聊天应用程序 我有一个持续运行的后台服务。 应用程序运行顺利,我能够毫无问题地接收和发送消息。 我正在使用默认的Smack 4.1重新连接管理器,它会在连接丢失后立即连接(几乎90%的时间)。 但有时,当连接丢失时,Smack重新连接管理器停止工作。 我无法找出造成这个问题的原因。 当我检查手机时,经过12到14小时的延迟,我可以看到Android服务仍在运行,但XMPP重新连接已停止工作。 然后我必须强制停止应用程序,然后重新启动服务并让它再次连接到XMPP服务器。 我的假设是,当“电话网络从Wifi到数据或数据到Wifi”切换时,就会发生这种情况。 与此同时,Smack 4.1重新连接管理器停止工作。 虽然,我不确定。 我有问题 PingManager有什么用? PingManager在这种情况下可以提供帮助吗? 什么是StreamManagement? 我该如何启用它? 这种情况有用吗? 任何其他解决方案来解决这个问题? 我在考虑以下解决方案: 要使用GCM以及XMPP,所以当XMPP无法重新连接时,我可以获得PUSH并在PUSH的基础上再次连接。 使用警报服务。 ( 问题:由于连接丢失而在队列中的消息将取决于下一个警报计划) 每次用户返回应用程序时连接XMPP。 ( 问题:由于连接丢失而在队列中的消息将取决于用户返回应用程序)

在切换数据连接时,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) […]

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

我正在使用aSmack库与远程xmpp服务器进行通信。 我能够发送/接收消息,但我想获取传入消息的时间戳。 你能告诉我,有可能吗? 因为我找不到关于这个问题的任何信息。 提前致谢

访问Google Talk聊天记录

我正在寻找一种方法来访问Google Talk聊天记录。 用于Android设备的方法,但不必特定于它。 我正在寻找一种官方方法,但这不是必需的。 AFAIK没有官方方法。 方法必须不是, 通过IMAP(需要启用聊天和标签) 通过Talk.apk的ContentResolver(要求安装talk.apk) 除非它以某种方式绕过上述方法之后列出的问题。 Googles不同的Google Talk应用程序可以进行聊天记录,但没有任何文档可以识别其工作原理。

如何在不使用XMPP或任何其他脚本的情况下使用FCM将设备发送到设备通知。

有没有办法通过FCM从一台Android设备向与Firebase数据库连接的其他设备发送上游通知消息。 我知道XMPP服务器然后可以接收上游消息并将通知发送到其他设备。要接收使用上游API发送的消息,我需要实现XMPP服务器,但还有其他方法吗?

将HTTP REST API用于聊天应用程序是否可以?

我们正在Android中构建聊天应用程序。 我们正在考虑使用HTTP REST API发送出站邮件。 与使用WebSockets或XMPP(这似乎更像是转移聊天消息的事实标准)相比,想知道它是一个好方法还是有任何缺点? 我能想到的一些优点/缺点是: + HTTP端点很容易在服务器端水平扩展(这是一个主要问题) +与HTTP相比,Websockets的学习曲线更陡峭 – 与websockets相比,HTTP消息的负载更大 根据这份文件,似乎Facebook最初使用AJAX来处理聊天消息: https://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf

启用流管理asmack android

我正面临使用XEP-0198流管理的问题。 基本上,我想在互联网断开连接并且服务器仍然在线存在客户端时,在Android上启用此消息丢弃问题。 为了解决这个问题,我想使用XEP-0198,它使用请求和确认过程。 你可以在这里find更多。 基本上我使用sm:3为此。 问题是,当我设置 XMPPConnection.DEBUG_ENABLED=true; 我得到sm:3在日志中是asmack的内部但我无法通过连接任何packetListner得到它。 这就是asmack调试打印内容: 这是我从packetFilter得到的: 我曾经通过查看聊天安全和yaxim的代码尝试过自定义数据包filter但是我没有得到如何在我的代码中得到这个以便我可以将现在收到的数据包的数量返回到服务器,以便服务器可以将任何丢失的数据包发回给我。 我还通过添加以下代码为此配置了提供程序管理器: addSimplePacketExtension(“sm”, URN_SM_3); addSimplePacketExtension(“r”, URN_SM_3); addSimplePacketExtension(“a”, URN_SM_3); addSimplePacketExtension(“enabled”, URN_SM_3); addSimplePacketExtension(“resumed”, URN_SM_3); addSimplePacketExtension(“failed”, URN_SM_3); private static final String URN_SM_3 = “urn:xmpp:sm:3”; private static void addSimplePacketExtension(final String name, final String namespace) { Log.e(“adding simple packet extension”, namespace+”—“+name); ProviderManager.getInstance().addExtensionProvider(name, namespace, new PacketExtensionProvider() { public PacketExtension parseExtension(XmlPullParser parser) […]

WhatsApp喜欢在android中使用xmpp和asmack进行群聊

我正在开发一个WhatsApp的克隆,我需要在WhatsApp中实现群聊。 我在Android端使用Openfire作为服务器和Asmack。 现在我按照本指南实施了群聊,但这不像WhatsApp。 用户不会留在房间中,并在离线后立即离开房间。 在1-1 chat中没有离线消息传递的机制。所以基本上我的问题是我如何使用具有以下function的asmack实现群聊: 无论用户是否在线,群组都可以保留用户。 向群组成员发送离线消息(当他上线时)。 我需要自定义服务器端还是客户端? 任何想法如何使用asmack和Openfire进行群聊等WhatsApp将受到高度赞赏。

XMPP aSmack – 如何获取当前用户状态(离线/在线/离开/等)?

我是android的新手xmpp / asmack。 谁能帮助我获得用户朋友的存在(名单) 我用这个: Presence availability = roster.getPresence(user); Mode userMode = availability.getMode(); 我还应该做些什么来获取我名单中列出的每个用户的可用性状态。

无法使用XMPPHP库在我的应用服务器和GCM的CCS之间建立xmpp连接

像推送通知(下游消息),我想在我的Android设备上实现上传消息到php中的我的应用服务器。 我正在使用Github的这个XMPPHP库将我的应用服务器连接到GCM的CCS。 但是当我尝试执行以下代码来连接GCM的CCS时: include ‘XMPPHP/XMPP.php’; $conn = new XMPPHP_XMPP(‘gcm-preprod.googleapis.com’, 5236, ‘@gcm.googleapis.com’, ”, ‘xmpphp’, ‘http://myserverdomain’, $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO); $conn->autoSubscribe(); $vcard_request = array(); try { $conn->connect(); … 我收到了以下错误。 1455354076 [INFO]: Connecting to tls://gcm-preprod.googleapis.com:5236 1455354106 [ERROR]: Could not connect. Could not connect before timeout.