Android和XMPP:目前可用的解决scheme

现在哪个XMPP库是Android开发的最佳select?

  • 我一直在使用修补的Smack库,正如在这里的许多其他问题中所build议的。 但是,这是两年前Smack API的补丁版本。 虽然它通常运作良好,我正在探索任何其他更新的选项。

  • 我一直在研究官方的Smack API ,经过一些研究,似乎现在可能工作得很好(尽pipe我还没有在实际应用中尝试过)。

  • 还有另外一个解决scheme, Beem的aSMACK库 。 Beem是一个相当新的XMPP客户端的android和我所了解的,他们正在使用他们自己的补丁版本的aSMACK。

  • 最后,有一个SMACK,但也没有更新一段时间(如网站所示)。

你有什么其他的build议,或者你能解释为什么我应该select其中的一个吗?

拍击

Smack是一个开源的XMPP客户端库。 从版本4.1开始,它在Android上运行。 有关更多信息,请参阅“Smack 4.1自述文件”,并参阅Ignite Realtime中的Smack项目页面 。 aSmack已经过时,并且弃用Smack 4.1。

我最近偶然发现了另一个开源解决scheme: jaxmpp2

jaxmpp2也针对Android(和Java SE)。 我真的不能说任何其他的东西,因为我不在我的Android / XMPP项目中使用jaxmpp2。 但它看起来像一个有效的替代aSmack 。

使用qsmack for android

https://code.google.com/p/qsmack/downloads/list

它是Android的最新版本

我曾经一对一聊天,群聊,video传输,audio传输,上次看到,更改注册号码…几乎完成什么应用程序。 我在openfire上创build了很多插件

我想用libstrophe和jni。 目标使用这是跨平台,简单的使用和性能。 libstrophe是用c编写的,所以很容易编写android makefile,因为依赖关系只有openssl和expat lib。 在我的情况下,我使用libjingle的openssl和expat lib已经端口到Android和IOS。 (只需要将gyp文件移植到android makefile或IOS项目中)。

下面是我的android makefile

LOCAL_PATH:= $(call my-dir)/../../libstrophe-0.8.7 SSL_PROJECT_PATH := openssl/libs/android include $(CLEAR_VARS) LOCAL_MODULE := openssl OPENSSL_LIB_NAME := lib$(LOCAL_MODULE).a LOCAL_CFLAGS := -DL_ENDIAN \ -DOPENSSL_THREADS \ -DPURIFY \ -DTERMIO \ -D_REENTRANT \ -DOPENSSL_NO_HW \ -DOPENSSL_NO_GOST \ -DOPENSSL_NO_DTLS1 \ -DOPENSSL_NO_RDRAND \ -DOPENSSL_NO_RSAX \ -Wall -pipe -fno-exceptions -fno-rtti -fstrict-aliasing -mfpu=neon -mfloat-abi=softfp OPENSSL_PATH := openssl/openssl OPENSSL_PATH_INC := $(LOCAL_PATH)/openssl/openssl LOCAL_C_INCLUDES := \ $(OPENSSL_PATH_INC) \ $(OPENSSL_PATH_INC)/include \ $(OPENSSL_PATH_INC)/crypto \ $(OPENSSL_PATH_INC)/crypto/asn1 \ $(OPENSSL_PATH_INC)/crypto/evp \ $(OPENSSL_PATH_INC)/crypto/modes \ $(LOCAL_PATH)/openssl/config/android \ $(LOCAL_PATH)/openssl LOCAL_ARM_MODE := arm LOCAL_CFLAGS += $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK LOCAL_SRC_FILES := \ // here is openssl file which is defined in gyp LOCAL_SHORT_COMMANDS := true include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) STROPHE_PATH := $(LOCAL_PATH) EXPAT := expat-2.1.0 OPENSSL_PATH := openssl/openssl OPENSSL_PATH_INC := $(LOCAL_PATH)/openssl/openssl EXPAT_SRC_FILES := \ $(EXPAT)/lib/xmlparse.c \ $(EXPAT)/lib/xmlrole.c \ $(EXPAT)/lib/xmltok.c COMMON_CFLAGS := \ -Wall \ -Wmissing-prototypes -Wstrict-prototypes \ -Wno-unused-parameter -Wno-missing-field-initializers \ -fexceptions \ -DHAVE_EXPAT_CONFIG_H \ -DLOGGING -DANDROID \ COMMON_C_INCLUDES += \ $(LOCAL_PATH)/$(EXPAT)/lib \ $(STROPHE_PATH) \ $(STROPHE_PATH)/src \ $(OPENSSL_PATH_INC) \ $(OPENSSL_PATH_INC)/include \ $(OPENSSL_PATH_INC)/crypto \ $(OPENSSL_PATH_INC)/crypto/asn1 \ $(OPENSSL_PATH_INC)/crypto/evp \ $(OPENSSL_PATH_INC)/crypto/modes \ $(LOCAL_PATH)/openssl/config/android \ $(LOCAL_PATH)/openssl \ ../android/jni STROPHE_SRC_FILES := src/auth.c \ src/conn.c \ src/ctx.c \ src/event.c \ src/handler.c \ src/hash.c \ src/jid.c \ src/md5.c \ src/sasl.c \ src/scram.c \ src/sha1.c \ src/snprintf.c \ src/sock.c \ src/stanza.c \ src/thread.c \ src/tls_openssl.c \ src/util.c \ src/parser_expat.c \ src/message.c \ src/presence.c \ src/roster.c JNI_SRC_FILES := ../android/jni/strophe-jni.c ifeq ($(TARGET_ARCH),arm) LOCAL_SDK_VERSION := 8 else LOCAL_SDK_VERSION := 9 endif LOCAL_ARM_MODE := arm LOCAL_SHORT_COMMANDS := true LOCAL_SYSTEM_SHARED_LIBRARIES := libc LOCAL_SHARED_LIBRARIES := openssl LOCAL_SRC_FILES := $(EXPAT_SRC_FILES) LOCAL_SRC_FILES += $(STROPHE_SRC_FILES) LOCAL_SRC_FILES += $(JNI_SRC_FILES) LOCAL_CFLAGS += $(COMMON_CFLAGS) LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_CFLAGS += $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK LOCAL_C_INCLUDES += $(COMMON_C_INCLUDES) LOCAL_MODULE:= libnativeclient LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY) 

使用Smack 4.1自述和升级指南

使用Android studio 2.3,最近我以非常简单的方式实现了一个演示。

– >只需在应用程序级别gradle中添加gradle dependency,如下所示

 compile "org.igniterealtime.smack:smack-tcp:4.1.0" // Optional for XMPPTCPConnection compile "org.igniterealtime.smack:smack-android-extensions:4.1.0" 

– >configuration连接configuration
注意 :在AsyncTask或其他后台线程中调用

  XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword("Your Username here", "Your Password here") .setHost("Host name here") .setServiceName("Your service name here") .setPort(Your port number here) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) //Disable or enable as per development mode .setDebuggerEnabled(true) // to view what's happening in detail .build(); 

– >使用isConnected()isAuthenticated()

– >使用ChatManager添加chatListener

您可以免费使用QuickBlox1。

它提供了许多function的开箱即用的XMPP服务器,您可以阅读有关functionhttp://quickblox.com/developers/Chat

下面是一个如何开始使用QuickBlox和aSmack库的例子http://quickblox.com/developers/Android_XMPP_Chat_Sample