哪个XMPP库是Android开发的最佳选择?
我一直在使用修补的Smack库,正如在SO中的许多其他问题中所建议的那样.但是,这是两年前Smack API的补丁版本.虽然它通常运作良好,但我正在探索任何其他更近期的选择.
我一直在看官方的Smack API,经过一些研究后,它似乎现在可能工作得很好(虽然我还没有在实际应用程序中尝试过).
还有我遇到的另一个解决方案,Beem的aSMACK库.Beem是一个相当新的Android的XMPP客户端,据我所知,他们正在使用他们自己的修补版本的aSMACK.
最后,还有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) 我正在开发一个WhatsApp的克隆,我需要在WhatsApp中实现群聊.我在Android端使用Openfire作为服务器和Asmack.现在我按照本指南实现了群聊,但这不像WhatsApp.用户不会留在房间内,并在离线后立即离开房间.在1-1 chat中没有离线消息传递的机制.所以基本上我的问题是如何使用具有以下功能的asmack实现群聊:
我需要自定义服务器端还是客户端?任何想法如何与asmack和Openfire一起完成WhatsApp组聊天将受到高度赞赏.
我正在尝试使用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/asmack.
谁能帮助我获得用户朋友的存在(名单)
我用这个:
Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();
Run Code Online (Sandbox Code Playgroud)
我还应该做些什么来获取我名单中列出的每个用户的可用性状态.
我正面临使用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) 我正在使用aSmack库与远程xmpp服务器进行通信.我能够发送/接收消息,但我想获取传入消息的时间戳.
你能告诉我,它有可能吗?因为我找不到关于这个问题的任何信息.
提前致谢
我正在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) 对于一个应用程序,我需要能够创建一个多用户聊天室并加入它.聊天服务器是一个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)
希望有人可以帮助我,并提供一些建议.