现在哪个XMPP库是Android开发的最佳选择?
我一直在使用 patched Smack library 在许多其他问题中提出 在这里。但是,这是一个补丁版本 两年前的Smack API。和 虽然它通常运作良好我 探索任何其他的,更近期的 选项。
我一直在关注 official Smack API 研究,似乎它可能只是工作 现在很好(虽然我没有 在实际应用程序中尝试过它。
我还有另一个解决方案 跨越, Beem's aSMACK library 。 Beem是一个相当新的XMPP客户端 android和我的理解 他们正在使用他们自己的补丁 aSMACK的版本。
最后,还有 aSMACK 也没有更新 一段时间(如网站所示)。
您有任何其他建议吗?或者您可以解释为什么我应该选择上述其中一项?
答案 0 :(得分:103)
Smack是一个开源的XMPP客户端库。从版本4.1开始,它在Android上本机运行。有关详细信息,请查看"Smack 4.1 Readme"并查看Smack project page at Ignite Realtime。 aSmack已经过时,不赞成使用Smack 4.1。
答案 1 :(得分:6)
我最近偶然发现了另一个开源解决方案: jaxmpp2
jaxmpp2也针对Android(和Java SE)。我真的不能说其他任何事情,因为我在我的Android / XMPP项目中没有使用jaxmpp2。但它看起来像是aSmack的有效替代品。
答案 2 :(得分:3)
使用qsmack for android
https://code.google.com/p/qsmack/downloads/list
它是Android的最新版本
我曾进行过一对一聊天,群聊,视频传输,音频传输,上次见过,更改注册号...几乎完整的应用程序。我在openfire上创建了很多插件
答案 3 :(得分:3)
我想使用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)
答案 4 :(得分:1)
您可以使用Tigase JaXMPP Client Library-它用途广泛,既可以用于JavaSE应用程序,也可以用于Android开发。它是积极开发的,并且Tigase Messenger for Android(Play Store)以此为基础。
有一个Basic library documentation Wiki页面,其中包含一些示例,有关详细信息,您应该参考javadocs
答案 5 :(得分:0)
使用Smack 4.1 Readme and Upgrade Guide
使用Android studio 2.3,最近我以非常简单的方式实现了一个演示。
- >只需在app level gradle中添加gradle依赖项,如下所示
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
// Optional for XMPPTCPConnection
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
- >配置连接配置
注意:在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
。
答案 6 :(得分:0)
您可以免费使用QuickBlox1。
它为XMPP服务器提供了大量功能,你可以在那里阅读有关功能http://quickblox.com/developers/Chat
以下是如何开始将QuickBlox与aSmack库http://quickblox.com/developers/Android_XMPP_Chat_Sample
一起使用的示例