小编Lax*_*iya的帖子

如何使用Smack 4.2连接到ejabberd?

我已经更改了我的应用程序以使用Smack 4.2替换Smack 4.1

但是我在config.setServiceName()中遇到错误;

此方法的参数已从String更改为DomainBareJid.我不知道如何在这个新的Smack中使用DomainBareJid和setServiceName.

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                .builder();
        config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);


        config.setServiceName("What should i put here?");


        config.setHost(serverAddress);
        config.setPort(5222);
        config.setDebuggerEnabled(true);
        connection = new XMPPTCPConnection(config.build());

        connection.setUseStreamManagement(true);
Run Code Online (Sandbox Code Playgroud)

如果我没有设置服务名称,那么我收到以下错误:

03-28 13:44:29.834: E/AndroidRuntime(7104): FATAL EXCEPTION: main
03-28 13:44:29.834: E/AndroidRuntime(7104): java.lang.RuntimeException: Unable to create service com.marothiatechs.cpm.MyService: java.lang.IllegalArgumentException: Must provide XMPP service name
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2715)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.app.ActivityThread.access$1600(ActivityThread.java:153)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.os.Looper.loop(Looper.java:137)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at android.app.ActivityThread.main(ActivityThread.java:5289)
03-28 13:44:29.834: E/AndroidRuntime(7104):     at …
Run Code Online (Sandbox Code Playgroud)

android xmpp smack

10
推荐指数
1
解决办法
6530
查看次数

如何从smack 4.1使用XEP 198(流管理)?

我是XMPP的新手.我在Android上使用smack在我的应用程序中提供聊天.

在smack 4.1中,添加了对流管理的支持,因此我使用了

  XMPPTCPConnection.setUseStreamManagementDefault(true);
Run Code Online (Sandbox Code Playgroud)

启用此功能,我得到:

03-27 00:50:54.945: D/SMACK(16991): SENT (5): <enable xmlns='urn:xmpp:sm:3' resume='true'/>
03-27 00:50:55.740: D/SMACK(16991): RECV (5): <enabled xmlns='urn:xmpp:sm:3' id='g2gCbQAAAAVTbWFja2gDYgAABZNiAAYRuGIAAW06' resume='true' max='300'/>
Run Code Online (Sandbox Code Playgroud)

因此,XEP 198在我的客户端和服务器上工作正常(ejabberd 15).

但我的问题是 - >我是否必须编写自己的代码来存储消息(服务器未确认)到我的android sqlite数据库中,并chat.sendMessage();在连接重新连接时手动重新发送它们?或者这个重发部分是由Smack自己完成的吗?

我没有得到任何关于在smack 4.1上使用XEP 198的文档 XMPPTCPConnection.setUseStreamManagementDefault(true);

是否有任何方法可以从smack听取<a/>从服务器收到的?

我见过yaxim的源代码,但似乎他们已经编写了自己的代码(通过发送数据包)来支持XEP 198,现在在Smack 4.1中完成了.

请帮助我在启用此支持后应该怎么做?

android xmpp ejabberd smack stream-management

6
推荐指数
1
解决办法
2526
查看次数

标签 统计

android ×2

smack ×2

xmpp ×2

ejabberd ×1

stream-management ×1