Android - 基于 websockets 的 XMPP

Android - XMPP over websockets

我正在尝试在我的 android 应用程序中使用基于 WebSockets 的 XMPP 实现聊天功能。

我找到了一个库 (org.igniterealtime.smack),但连接是通过 TCP 而不是 WebSockets 建立的,我不希望这样。

是否有人必须实现相同的功能并能指出正确的方向?

对 Smack 的 Websocket 支持被跟踪为 SMACK-835。它目前在 Smack 的主要分支中,并计划成为 Smack 4.5 版本。

您现在可以通过消费 Smack 预发行版或来自 https://www.igniterealtime.org/archiva/repository/maven/

的夜间工件来使用它

不确定它是否可以并且不违反 TOS 等等,但第一句话暗示了 XMPP + WebSocket 的一般指导,而不是严格要求 Smack 回答 - 你可以使用 JaXMPP 库(https://github.com/tigase/jaxmpp), which already supports WebSocket and and is compatible with Android (StorkIM, https://github.com/tigase/stork 基于在上面)。

建立WebSocket连接非常容易(甚至加密):


JID user = JID.jidInstance("user@example.com/resource");
String password = "password";

Jaxmpp contact = new Jaxmpp();
contact.getModulesManager().register(new MessageModule());

contact.getConnectionConfiguration().setConnectionType(ConnectionConfiguration.ConnectionType.websocket);
contact.getConnectionConfiguration().setBoshService("wss://xmpp.example.com:5291");

contact.getConnectionConfiguration().setUserJID(user.getBareJid());
contact.getConnectionConfiguration().setUserPassword(password);

try {
    contact.login(true);
    if (contact.isConnected()) {
        contact.disconnect();
    }
} catch (Exception e) {
    e.printStackTrace();
}

(免责声明:我来自 Tigase 团队,该团队创建了 JaXMPP 和 StorkIM)