标签: smack

如何在asmack,android中使用户在线或离线

可能重复:
XMPP aSmack - 如何获取当前用户状态(离线/在线/离开/等)?

我正在开发基于asmack lib的Android上的聊天应用程序.我在ListView上显示所有用户,但我使用图像显示在线/离线用户.但它只返回离线图像,即使用户在线,这里是我的代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.buddies);

    Controller.getInstance().roster = Controller.getInstance().connection.getRoster();
//  ArrayList<Buddy> buddies = new ArrayList<Buddy>();
    Collection<RosterEntry> entries = Controller.getInstance().roster.getEntries();
    Controller.getInstance().buddyList = new Buddy[entries.size()];

    int i = 0;

    for (RosterEntry r : entries) {
        Buddy bud = new Buddy();
        VCard card = new VCard();
        try {
            ProviderManager.getInstance().addIQProvider("vCard",
                    "vcard-temp", new VCardProvider());
            card.load(Controller.getInstance().connection, r.getUser());
        } catch (XMPPException e) {
            Log.e("ChatOnAndroid", e.getMessage() + " " + r.getUser() + " "
                    + e.getLocalizedMessage());
        }
        bud.jid …
Run Code Online (Sandbox Code Playgroud)

android openfire smack asmack

9
推荐指数
1
解决办法
8077
查看次数

如何实现消息读取状态,如whatsapp蓝色刻度?

我正在开发一个应用程序,聊天是一个模块,聊天我正在使用xmpp.当我发送消息时,我使用DeliveryReceiptManager获取该消息传递状态.

DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener()
{
        @Override
        public void onReceiptReceived(String arg0, String arg1, String arg2)
        {
            Log.v("app", arg0 + ", " + arg1 + ", " + arg2);
        }
});
Run Code Online (Sandbox Code Playgroud)

但我需要证明该消息是用户READ或不像whatsApp蓝色tickmark,任何人都可以帮助我,我在这里被击中.如何实现此消息读取概念.

提前致谢.

android xmpp smack asmack

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

smack 4.2.0出错:在AAAA中产生了错误响应NX_DOMAIN

我启动openFire并用spark测试它一切正常但是当我尝试在android studio中连接smack 4.2.0时出现此错误:

Ljavax /命名/目录/ InitialDirContext;

我的依赖是这样的:

编译"org.igniterealtime.smack:smack-java7:4.2.0"compile"org.igniterealtime.smack:smack -tcp:4.2.0"compile"org.igniterealtime.smack:smack-im:4.2.0"compile" org.igniterealtime.smack:smack-extensions:4.2.0"compile"org.igniterealtime.smack:smack-android-extensions:4.2.0"compile"org.igniterealtime.smack:smack-bosh:4.2.0"

当从依赖项中删除这个:"编译org.igniterealtime.smack:smack-java7:4.2.0"并添加它:compile"org.igniterealtime.smack:smack-android:4.2.0"我的依赖项变成这样:

编译'com.android.support:appcompat-v7:24.0.0'compile"org.igniterealtime.smack:smack-android:4.2.0"compile"org.igniterealtime.smack:smack -tcp:4.2.0"compile" org.igniterealtime.smack:smack-im:4.2.0"compile"org.igniterealtime.smack:smack-extensions:4.2.0"compile"org.igniterealtime.smack:smack-android-extensions:4.2.0"compile" org.igniterealtime.smack:咂嘴波什:4.2.0"

我收到此错误:

org.jivesoftware.smack.SmackException $ ConnectionException:以下地址失败:'192.168.209.2:5222'失败,原因是:de.measite.minidns.hla.ResolutionUnsuccessfulException:要求192.168.209.2.IN A产生错误响应NX_DOMAIN,'192.168.209.2:5222'失败,原因是:de.measite.minidns.hla.ResolutionUnsuccessfulException:要求192.168.209.2.在AAAA中产生了错误响应NX_DOMAIN

当我尝试conn.connect()时出现错误的代码部分是这样的:

XMPPTCPConnectionConfiguration config = null;  
            try {  
                config = XMPPTCPConnectionConfiguration.builder()  
                        .setUsernameAndPassword("admin", "thepass")  
                        .setXmppDomain("192.168.1.3")  
                        .setHost("192.168.209.2")  
                        .setPort(5222)  
                        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)  
                        .build();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
                AbstractXMPPConnection conn1 = new XMPPTCPConnection(config);  
                conn1.setReplyTimeout(60000);  
                conn1.setPacketReplyTimeout(60000);  
                conn1.connect();  
Run Code Online (Sandbox Code Playgroud)

android chat xmpp smack

9
推荐指数
2
解决办法
2966
查看次数

失败是因为:de.measite.minidns.hla.ResolutionUnsuccessfulException:要求xxxx.在AAAA中产生了错误响应NX_DOMAIN

我将smack升级到4.2.0后,我遇到了连接问题.

The following addresses failed: 'xxxx:5222' failed because: 

de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for xxxx.    IN  A yielded an error response NX_DOMAIN, '52.90.233.38:5222' failed because: de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for xxxx. IN  AAAA yielded an error response NX_DOMAIN
Run Code Online (Sandbox Code Playgroud)

在连接配置构建器中设置主机时会发生此问题.

例如:

.setHost(ServiceConstants.CHAT_SERVER)
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/igniterealtime/Smack/wiki/Smack-4.2-Readme-and-Upgrade-Guide

这是我的最终配置,它在Davood Falahati帮助之后起作用!

InetAddress inetAddress = InetAddress.getByName(ServiceConstants.CHAT_SERVER);
            XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder()
                    .setXmppDomain(JidCreate.from(ServiceConstants.CHAT_SERVER).asDomainBareJid())
                    .setPort(5222)
                    .setHostAddress(inetAddress)
                    .setDebuggerEnabled(true)
                    .setSendPresence(true)
Run Code Online (Sandbox Code Playgroud)

android xmpp smack

9
推荐指数
1
解决办法
2365
查看次数

XMPP服务器名称和XMPP服务名称之间的区别?

在Smack API中,有一个用于连接的配置类,在此页面中进行了描述

ConnectionConfiguration

我对服务名称和服务器名称之间的区别感到困惑.

假设我有一台名为"mybox.mydomain.com"的计算机,我在ejabberd上配置了一个名为"myhost"的主机(使用{hosts, ["myhost"]}.ejabbed.cfg中的行),

在这种情况下,主机名,服务器名称和服务名称是什么?

xmpp openfire ejabberd smack

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

如何使用Smack了解XMPP openfire中的键入状态

我正在使用Openfire XMPP服务器开发聊天应用程序.我可以在两个用户之间进行文字聊天 但是我想在某人输入消息时知道打字状态.所以我创建了一个类: -

public class typingStatus implements ChatStateListener {

    @Override
    public void processMessage(Chat arg0, Message arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void stateChanged(Chat arg0, ChatState arg1) {
        // TODO Auto-generated method stub
        System.out.println(arg0.getParticipant() + " is " + arg1.name());

    }

}
Run Code Online (Sandbox Code Playgroud)

但我很困惑,它将如何运作?我知道我需要一个数据包,我可以在Listener中使用它.但我无法找到该数据包.

请任何人建议,它将如何运作?

还有Smack和asmack有什么区别?

谢谢!

android xmpp openfire smack asmack

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

Smack(XMPP)聊天应用程序的Android后台服务

我正在使用asmack库实现聊天应用程序.我想启动一个始终运行的服务,其中所有的连接管理任务都要完成,并且应该继续接收传入的数据包并将消息保存在我的sqlite数据库中.当我的应用程序启动时,我希望我的应用程序也会收到通知消息,而后台服务将消息插入sqlite数据库.如何用粘性服务实现这样的结构.是否还需要部分唤醒锁定.因为,有时也会根据特定需求使用http来下载图像.

android xmpp smack asmack

8
推荐指数
1
解决办法
4324
查看次数

Android - Smack存在和"打字"功能无法正常工作

我在Android应用程序中使用Smack库v4.1.0(不是aSmack)进行聊天功能.我似乎无法使用以下两个功能:

  1. 用户存在(在线,上次见过)
  2. 聊天消息状态(已发送,已发送,已读取)

对于User Presence,我使用以下始终返回的代码null.

Presence userPresence = roster.getPresence(toUser);
System.out.println("*** User status: " + userPresence.getStatus());

if (userPresence.getMode() == Presence.Mode.available || userPresence.getMode() == Presence.Mode.chat) {
    lblIsTyping.setText("Online");
} else {
    lblIsTyping.setText("Offline");
}
Run Code Online (Sandbox Code Playgroud)

对于消息状态,我使用以下代码:

private class MessageListenerImpl implements MessageListener, ChatStateListener {

    @Override
    public void processMessage(Chat chat, Message message) {
        processMessageCore(message);
    }

    @Override
    public void stateChanged(Chat chat, ChatState chatState) {
        System.out.println("*** chat: " + chat.toString());
        if (ChatState.composing.equals(chatState)) {
            lblIsTyping.setText("typing...");
            System.out.println("Chat State: " + chat.getParticipant() + " is typing..");
        } 
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java android chat xmpp smack

8
推荐指数
1
解决办法
1423
查看次数

在localhost上Smack和Openfire之间的路由错误

我有一个实现Smack 4.1.7的Java应用程序,我将其用作Openfire 4.0.2的模拟客户端.目前,Openfire正在我的localhost上运行.Smack可以使用此连接正确登录和验证:

XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
      .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
      .setServiceName(XMPP_HOST_NAME) // equals xmppDomain on server
      .setUsernameAndPassword("user1", "pwd1")
      .setResource("tester")
      .setDebuggerEnabled(true)
      .build();
Run Code Online (Sandbox Code Playgroud)

现在当Smack尝试创建或加入MUC时,请求超时(SmackException $ NoResponseException)和Openfire记录以下内容:

2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl - 
Unable to route packet. Packet should only be sent to available sessions and the 
route is not available. 
<presence id="WrkXH-6" from="user1@localhost/tester" to="user1@localhost/tester">
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/>
</presence>
2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl - 
Failed to route packet to JID: user1@localhost/tester packet: 
<presence id="WrkXH-6" from="user1@localhost/tester" to="user1@localhost/tester">
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/>
</presence>
Run Code Online (Sandbox Code Playgroud)

我在服务器端和客户端都使用了"localhost","127.0.0.1"和我的机器名称作为XMPP_HOST_NAME,我不断收到同样的错误.任何帮助,将不胜感激.

openfire localhost smack

8
推荐指数
1
解决办法
571
查看次数

使用Smack for Android实现FCM与XMPP

我正在使用XMPP在我的Android应用程序中实现聊天,我已经使用了Smack API.我的聊天工作正常,我在本地保存Android设备上的所有聊天消息.以下是我目前面临的一些问题.

  1. 在聊天期间,如果某种方式连接丢失,那么重新连接需要花费很多时间,有时甚至连接都没有.即使在连接连接后,它也停止发送聊天消息,因为它不再在另一侧接收.我已经重新初始化了资源,但它有时会工作
  2. 如果我的USER断开连接(离线),我想使用FCM发送消息.我已经为其他事情实施了FCM并且工作正常.但我想知道如果其他用户处于离线状态,我如何将FCM与SMACK API一起使用.我正在尝试,但我不知道使用XMPP实现FCM的正确方法.
  3. 在聊天期间,我无法在另一方获得用户的存在.

请建议我正确的XMPP(openfire)实施方式.所以,它像whatsapp一样无缝地工作.用户在互联网重新连接或活动打开后立即连接为新实例等.它的1对1聊天,即一次只有两个用户连接.在此先感谢,请不要降级我的问题,因为我是XMPP实施的新手.

android xmpp smack firebase-cloud-messaging

8
推荐指数
1
解决办法
413
查看次数