标签: asmack

Android和XMPP:目前可用的解决方案

哪个XMPP库是Android开发的最佳选择?

  • 我一直在使用修补的Smack库,正如在SO中的许多其他问题中所建议的那样.但是,这是两年前Smack API的补丁版本.虽然它通常运作良好,但我正在探索任何其他更近期的选择.

  • 我一直在看官方的Smack API,经过一些研究后,它似乎现在可能工作得很好(虽然我还没有在实际应用程序中尝试过).

  • 还有我遇到的另一个解决方案,Beem的aSMACK库.Beem是一个相当新的Android的XMPP客户端,据我所知,他们正在使用他们自己的修补版本的aSMACK.

  • 最后,还有aSMACK,但也有一段时间没有更新(如网站所示).

您有任何其他建议或者您能解释为什么我应该选择以上其中一种吗?

android xmpp smack asmack

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

远程客户端没有响应:使用asmack进行文件传输时出错

使用asmack接收文件时遇到问题.在这里,我粘贴我发送和接收日志的错误和数据包

// error
04-21 19:21:05.109: WARN/System.err(7401): Error in execution:
04-21 19:21:05.109: WARN/System.err(7401):   -- caused by: java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401):   -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401):     at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
04-21 19:21:05.109: WARN/System.err(7401):     at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
04-21 19:21:05.109: WARN/System.err(7401):     at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
04-21 19:21:05.109: WARN/System.err(7401):     at java.lang.Thread.run(Thread.java:1019)
04-21 19:21:05.109: WARN/System.err(7401): Nested Exception:
04-21 19:21:05.109: WARN/System.err(7401): java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401):   -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401):     at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:234)
04-21 19:21:05.109: WARN/System.err(7401):     at java.util.concurrent.FutureTask.get(FutureTask.java:91)
04-21 19:21:05.109: WARN/System.err(7401): …
Run Code Online (Sandbox Code Playgroud)

android xmpp smack asmack

26
推荐指数
1
解决办法
3149
查看次数

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

我正在开发一个WhatsApp的克隆,我需要在WhatsApp中实现群聊.我在Android端使用Openfire作为服务器和Asmack.现在我按照本指南实现了群聊,但这不像WhatsApp.用户不会留在房间内,并在离线后立即离开房间.在1-1 chat中没有离线消息传递的机制.所以基本上我的问题是如何使用具有以下功能的asmack实现群聊:

  • 无论用户是否在线,群组都可以保留用户.
  • 向群组成员发送离线消息(当他上线时).

我需要自定义服务器端还是客户端?任何想法如何与asmack和Openfire一起完成WhatsApp组聊天将受到高度赞赏.

android xmpp openfire asmack multiuserchat

19
推荐指数
0
解决办法
3440
查看次数

将Smack与Android Studio项目集成,用于聊天应用程序

我正在尝试使用ejabberd服务器和smack库实现聊天信使,但很难整合所有的jar和smack的依赖.我正在使用android Studio.

我的build.gradle(模块):

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"

        defaultConfig {
            applicationId "com.example.nit.xmppclient"
            minSdkVersion 18
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:22.2.0'

        compile "org.igniterealtime.smack:smack-android:4.1.0"
        compile "org.igniterealtime.smack:smack-tcp:4.1.0"
        compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"

        compile 'org.ogce:xpp3:1.1.6'

    }
Run Code Online (Sandbox Code Playgroud)

首先我得到XMLpullparser错误然后我添加了xpp3.但是在我添加了xpp3后,我得到了

Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

的build.gradle(项目):

// Top-level build file where …
Run Code Online (Sandbox Code Playgroud)

android xmpp ejabberd smack asmack

19
推荐指数
1
解决办法
5910
查看次数

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

我是android的新手xmpp/asmack.

谁能帮助我获得用户朋友的存在(名单)

我用这个:

Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();
Run Code Online (Sandbox Code Playgroud)

我还应该做些什么来获取我名单中列出的每个用户的可用性状态.

android xmpp smack asmack

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

启用流管理asmack android

我正面临使用XEP-0198流管理的问题.

基本上,我想在互联网断开连接并且服务器仍然在线存在客户端时,在Android上启用此消息丢弃问题.

为了解决这个问题,我想使用XEP-0198,它使用请求和确认过程.你可以在这里找到更多.

基本上我使用的是sm:3.问题是,当我设置

XMPPConnection.DEBUG_ENABLED=true;
Run Code Online (Sandbox Code Playgroud)

我在日志中得到sm:3,这是asmack的内部,但我无法通过连接找到任何packetListner.

这就是asmack调试打印内容:

<r xmlns='urn:xmpp:sm:3'/><message from='test1@pinmessage.com/Smack' to='test1@pinmessage.com' id='CQUe6-5'><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message><r xmlns='urn:xmpp:sm:3'/>
Run Code Online (Sandbox Code Playgroud)

这是我从packetFilter得到的:

<message id="CQUe6-5" to="test1@pinmessage.com" from="test1@pinmessage.com/Smack"><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message>
Run Code Online (Sandbox Code Playgroud)

我曾经通过查看聊天安全和yaxim的代码尝试过自定义数据包过滤器,但是我没有得到如何<r xmlns='urn:xmpp:sm:3'/>在我的代码中获得这个,以便我可以将收到的数据包的数量现在返回到服务器,以便服务器可以发送我支持任何丢失的数据包.

我还通过添加以下代码为此配置了提供程序管理器:

        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) throws Exception {
                StreamHandlingPacket packet = new StreamHandlingPacket(name, …
Run Code Online (Sandbox Code Playgroud)

android xmpp asmack

18
推荐指数
1
解决办法
1926
查看次数

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

我正在使用aSmack库与远程xmpp服务器进行通信.我能够发送/接收消息,但我想获取传入消息的时间戳.

你能告诉我,它有可能吗?因为我找不到关于这个问题的任何信息.

提前致谢

android xmpp smack asmack

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

在切换数据连接时,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)
   at libcore.io.Posix.sendtoBytes(Native Method)
   at libcore.io.Posix.sendto(Posix.java:146)
   at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
   at libcore.io.IoBridge.sendto(IoBridge.java:473)
   ... 9 more
   at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552)
   at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
   at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
   at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
   at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
   at java.io.InputStreamReader.read(InputStreamReader.java:244)
   at java.io.BufferedReader.read(BufferedReader.java:310)
   at org.jivesoftware.smack.XMPPConnection$AliveReader.read(XMPPConnection.java:1122)
   at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1496)
   at …
Run Code Online (Sandbox Code Playgroud)

android xmpp smack asmack

15
推荐指数
1
解决办法
2404
查看次数

Smack和aSmack有什么区别?

我无法在Android 上使用Smack,而aSmack完美无缺?当比较源代码时,它看起来有点相似,差异来自哪里?

Smack和aSmack有什么区别?

android xmpp smack asmack

13
推荐指数
2
解决办法
7196
查看次数

无法使用Android的aSmack库创建多用户聊天(MUC)房间:"packet.DefaultPacketExtension无法强制转换为packet.MUCUser"

对于一个应用程序,我需要能够创建一个多用户聊天室并加入它.聊天服务器是一个openfire服务器.

我曾经有过:

MultiUserChat chat = new MultiUserChat(connection, roomName + "@conference.localhost");
chat.join(nickname);
Run Code Online (Sandbox Code Playgroud)

当房间不存在时,它会创建房间并加入.但是下一个用户无法加入.他得到了404,收件人不可用(404).这表明聊天室被锁定了什么.

然后我在文档中找到了代码并尝试了以下内容:

chat.create(nickname);

// Send an empty room configuration form which indicates that we want
// an instant room
chat.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试执行此操作时,它说它在logcat中崩溃并出现以下错误:

03-02 12:04:12.890: E/AndroidRuntime(20872): FATAL EXCEPTION:

 AsyncTask #3 03-02 12:04:12.890: E/AndroidRuntime(20872):

 java.lang.RuntimeException: An error occured while executing
 doInBackground() 
03-02 12:04:12.890: E/AndroidRuntime(20872): Caused
 by: java.lang.ClassCastException:

 org.jivesoftware.smack.packet.DefaultPacketExtension cannot be cast to
 org.jivesoftware.smackx.packet.MUCUser 03-02 12:04:12.890:
 E/AndroidRuntime(20872):   at
 org.jivesoftware.smackx.muc.MultiUserChat.getMUCUserExtension(MultiUserChat.java:2002)
 03-02 12:04:12.890: E/AndroidRuntime(20872):   at
 org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:364)
 03-02 12:04:12.890: E/AndroidRuntime(20872):   at
 be.xios.crs.pivi.managers.XmppManager.createOrJoinChatGroup(XmppManager.java:116)
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我,并提供一些建议.

android xmpp asmack

12
推荐指数
2
解决办法
8930
查看次数

标签 统计

android ×10

asmack ×10

xmpp ×10

smack ×7

ejabberd ×1

multiuserchat ×1

openfire ×1