标签: smack

Smack(XMPP 库)中的名册组和多用户聊天室有什么区别?

我是 XMPP 协议的新手,我正在使用 smack 库在 android 中开发一个聊天应用程序。我一直在创建群聊。我想创建一个群组,向其中添加成员并向群组的所有成员(如 WhatsApp 群组)发送消息。在搜索群聊时,我得到了两件事

  1. 组:使用类中createGroup(String name)存在的方法创建组Roster
  2. 多用户聊天:使用MultiUserChatManager.

我对什么是组以及什么是多用户聊天感到困惑?谁能解释一下它们之间的基本区别,我应该使用哪一个,以及如何向群组中的每个人发送消息?

xmpp smack

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

XMPPError:使用smack 4.1.2创建新用户时禁止身份验证错误

我正在尝试使用smack客户端4.1.2创建用户.我收到了以下错误.

Send XML on stream = <<"<iq from='abc.example.com' to='admin@abc.example.com/Smack' id='Dym8b-14' type='error'><query xmlns=jabber:iq:register><password>xxxxxx</password><username>user</username><registered/></query><error code=403 type=auth><forbidden xmlns=urn:ietf:params:xml:ns:xmpp-stanzas/></error></iq>">>
Run Code Online (Sandbox Code Playgroud)

我的ejabberd配置如下(.yml文件)

register_from:
admin: allow
...
access_from: register_from
access: register
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上述错误.请帮忙

添加代码段以显示如何使用smack 4.1.0创建新用户

connection = new XMPPTCPConnection(getConnectionConfiguration());
                connection.connect();
                connection.login("admin", "admin");
                if(connection.isAuthenticated())
                {
                    AccountManager accountManager = AccountManager.getInstance(connection);
                    accountManager.sensitiveOperationOverInsecureConnection(true);
                    accountManager.createAccount(userName, password);
                    connection.disconnect();
                    // The account has been created, so we can now login
                    connection.login(userName, password);
                }

private XMPPTCPConnectionConfiguration getConnectionConfiguration()
{

    XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
              .setServiceName("abc.example.com")
               .setHost("abc.example.com")
               .setPort(5222)
              .build(); 

    return config;
}
Run Code Online (Sandbox Code Playgroud)

ejabberd smack

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

smack / ejabberd 连接超时

我们使用 ejabberd 的 Pub/Sub 机制在多个客户端之间发送消息。服务器上运行的ejabberd版本是16.04,smack库版本是4.1.1。

消息的发布和订阅在一段时间内工作正常,一段时间后我们在客户端收到以下异常:

org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 15000ms (~15s). Used filter: IQReplyFilter: iqAndIdFilter (AndFilter: (OrFilter: (IQTypeFilter: type=error, IQTypeFilter: type=result), StanzaIdFilter: id=T89NL-174)), : fromFilter (OrFilter: (FromMatchesFilter (full): pubsub.unio.com))
Run Code Online (Sandbox Code Playgroud)

尝试谷歌搜索原因,但无法找到解决方案。任何帮助表示赞赏。

提前致谢。

android ejabberd smack

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

XMPPError: bad-request - 修改错误使用 smack 库 4.1.8 和 openfire 创建新用户

我一直在使用 smack 客户端库 4.1.8 和 xmpp 服务器(openfire 服务器)开发聊天应用程序,但是在尝试使用 Accountmanger 类创建新用户时,它引发了异常“XMPPError: bad-request - modify”

XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
                        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                        .setHost("127.0.0.1")
                        .setDebuggerEnabled(true)
                        .setPort(5222)
                        .setSendPresence(true)
                        .setServiceName("127.0.0.1")
                        .build();

                AbstractXMPPConnection conn2 = new XMPPTCPConnection(conf);

                //conn2.login();
                conn2.connect();

                AccountManager accountManager = AccountManager.getInstance(conn2);
                if (accountManager.supportsAccountCreation()) {
                    accountManager.sensitiveOperationOverInsecureConnection(true);
                    accountManager.createAccount("qidus", "123456");
                    conn2.login("qidus", "123456");

                }

            } catch (SmackException | IOException | XMPPException e) {
                e.printStackTrace();
            }
Run Code Online (Sandbox Code Playgroud)

例外是这个

04:01:41 AM SENT (0): <iq to='127.0.0.1' id='aYej1-3' type='get'><query xmlns='jabber:iq:register'></query></iq>
Run Code Online (Sandbox Code Playgroud)

04:01:41 AM RECV (0):

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: bad-request - modify
at org.jivesoftware.smack.XMPPException$XMPPErrorException.ifHasErrorThenThrow(XMPPException.java:135)
at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)
at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:213) …
Run Code Online (Sandbox Code Playgroud)

java xmpp openfire smack

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

smack消息发送状态

我正在使用smack和openfire在android中创建聊天应用程序.对于消息状态我在其他客户端中传递和显示消息没有问题(仔细检查).我将发送一个简单的json消息,如bellow给发送者:{"delivery":timestapmp}并解析它并仔细检查低于之前发送的时间戳的消息.问题是关于发送状态(一次检查).当我发送消息时,服务器没有响应消息发送的任何内容.是否有可能在smack中发送带有来自服务器回调的消息.如果可能的话,是否可以在回调响应中发送时间服务器.谢谢 .

android openfire smack

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

Java smack/Android asmack RosterListener

我一直在寻找很多.但找不到任何东西.我需要用rosterlistener刷新联系人的状态.(离线/在线).创建名单时,我做:

Presence presence = roster.getPresence(r.getUser());
                if(presence.isAvailable()){
                    userstatus.add("online");
                }else{
                    userstatus.add("offline");
                }
Run Code Online (Sandbox Code Playgroud)

userstatus是一个矢量字符串,然后我从中创建一个字符串数组.在我的主程序中,我只是检查这个搅拌阵列的离线或在线.但是,如果用户离线/在线,该怎么办.究竟我必须把听众以及如何使用它?

java android listener smack

2
推荐指数
1
解决办法
5399
查看次数

如何检查客户端是否连接到XMPP服务器

我正在为Android和iPhone工作一个XMPP客户端.我已经能够连接到服务器并获取消息.

但客户端在几分钟后与XMPP服务器断开连接.IOS XMPP框架由委托方法组成,该方法指示客户端是否连接到服务器.如果连接未断开,那么我们可以使用委托方法重新连接.我在Android客户端(我正在使用aSmack库)中使用以下代码来检查是否存在连接.但这似乎不起作用.

public void recieveMessage()
{  

           Log.e("xmppclient","will receive messages");
           PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
           connection.addPacketListener(new PacketListener() {

           public void processPacket(Packet packet) {
               if(connection != null && connection.isConnected()) 
               {
                   Message message = (Message) packet;
                   if (message.getBody() != null)
                        {
                   fromName = StringUtils.parseBareAddress(message.getFrom());
                   String messageBody=message.getBody();
                   Log.e("Message", messageBody );
                   Intent i = new Intent(NEW_MESSAGE);  
                   i.putExtra("username", StringUtils.parseBareAddress(message.getFrom()));
                   i.putExtra("message", message.getBody());
                   sendBroadcast(i);
                        }
                   else
                   {

                       connectToXmpp();
                   }
               }

            }

           }
   ,filter);
   }
Run Code Online (Sandbox Code Playgroud)

connectToXMPP()是打开新连接的方法.

一旦连接消失,有没有其他方法来检查连接并重新连接到XMPP ...... ???

android xmpp smack

2
推荐指数
1
解决办法
9310
查看次数

Java和Jabber/Smack

我正在尝试使用最新版本的Smack(3.2.1)编写一个简单的示例来在两个帐户之间发送和接收消息.

Connection connection = new XMPPConnection("jabber.org");
connection.connect();
connection.login("username", "password");
Run Code Online (Sandbox Code Playgroud)

但我甚至无法通过登录部分.当我运行上面的代码时,我得到了这个异常:

Exception in thread "main" SASL authentication DIGEST-MD5 failed: invalid-authzid: 
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:337)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203)
at org.jivesoftware.smack.Connection.login(Connection.java:348)
at com.smack.TestSmack.main(TestSmack.java:19)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我确信我的用户名和密码有效,因为我可以使用我的IM客户端登录.

有人能指出我目前正在研究Smack的例子吗?这非常令人沮丧,因为文档和库似乎不同步.

谢谢-

java xmpp smack

2
推荐指数
1
解决办法
7448
查看次数

Stanza for Smack 4.1.4中的自定义扩展元素

我正在将我的android应用程序从asmack-android库移动到Smack 4.1.4.我在Smack的asmack版本中有一些PacketExtensions,它使用PacketExtension和PacketExtensionProvider类来处理.由于在Smack 4.1.4中不推荐使用PacketExtension,因此我对类和接口ExtensionElement,DataPacketExtension,ExtensionElementProvider,DefaultExtensionElement感到困惑.你们中的任何人都可以给我一个创建扩展的例子,可以添加节和解析... https://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack /packet/DefaultExtensionElement.htmlhttps://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware /smack/provider/ExtensionElementProvider.html

smack asmack

2
推荐指数
1
解决办法
5141
查看次数

Smack XMPP android连接崩溃

我正在使用Smack XMPP作为Android应用程序,之前每件事情都非常顺利,除了今天早上它开始无缘无故崩溃.这是我在Gradle中所包含的内容:

compile 'org.igniterealtime.smack:smack-android:4.2.0'
compile 'org.igniterealtime.smack:smack-tcp:4.2.0'
compile 'org.igniterealtime.smack:smack-android-extensions:4.2.0' 
Run Code Online (Sandbox Code Playgroud)

并且日志正在打印此错误

位于de.measite.minidns.dnssec.DNSSECClient的de.measite.minidns.DNSName.from(DNSName.java:287)的java.lang.ExceptionInInitializerError.(DNSSECClient.java:48)de.measite.minidns.hla.DnssecResolverApi .(DnssecResolverApi.java:47)at.measite.minidns.hla.DnssecResolverApi.(DnssecResolverApi.java:38)at orme.jivesoftware.smack的de.measite.minidns.hla.DnssecResolverApi.(DnssecResolverApi.java:31) .util.dns.minidns.MiniDnsResolver.(MiniDnsResolver.java:54)位于org.jivesoftware.smack的java.lang.Class.forName(Class.java:324)的java.lang.Class.classForName(Native Method). SmackInitialization.loadSmackClass(SmackInitialization.java:218)private static final DNSName DEFAULT_DLV = DNSName.from("dlv.isc.org");

在这条线上

  XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                .builder();
Run Code Online (Sandbox Code Playgroud)

我搜索了很多但找不到任何东西.

谢谢

java android xmpp smack

2
推荐指数
1
解决办法
501
查看次数

标签 统计

smack ×10

android ×5

xmpp ×5

java ×4

ejabberd ×2

openfire ×2

asmack ×1

listener ×1