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

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

  • 我一直在使用 < strong > < a href = “ http://davanum.wordpress.com/2008/12/29/update-xmpp-client-for-android/”> 补丁 Smack 库 照原样运行 还有很多其他问题 然而,这是一个补丁版本的 两年前的 Smack API 虽然它通常工作得很好 探索任何其他的,最近的 选项。

  • 我一直在关注这位官员 Smack API 和后一点 研究,似乎它可能工作正当 现在很好(虽然我没有 在实际应用程序中尝试过)

  • 我还有一个办法 横向,Beem 的 aSMACK 库。 Beem 是一个相当新的 XMPP 客户端 据我所知是个机器人 他们使用自己的补丁 版本的 aSMACK.

  • 最后,还有 译自: 美国《科学》杂志网站(http://code.google.com/p/aSMACK/) 也没有更新过 一段时间(正如网站建议的那样)

你还有什么其他的建议吗? 或者你能解释一下为什么我应该选择上面的其中一个而不是其他的吗?

97014 次浏览

Smack 是一个开源的 XMPP 客户端库。从4.1版本开始,它就在 Android 上运行。更多信息请看 “ Smack 4.3 Readme”在 Ignite Realtime 打击项目页面

我最近偶然发现了另一个开源解决方案: 译自: 美国《科学》杂志网站(https://projects.tigase.org/Projects/jaxmpp2)

Jaxmpp2也面向 Android (和 JavaSE)。我真的不能说什么,因为我不在我的 Android/XMPP 项目中使用 jaxmpp2。但它似乎是 阿斯马克的有效替代品。

为机器人使用 qstop

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

这是 Android 的最新版本

我已经工作了一对一的聊天,群聊天,视频传输,音频传输,最后一次看到,更改注册号码... 几乎完成什么应用程序。我在 openfire 上创建了很多插件

我想使用 libstroph 和 jni。目标使用这是跨平台,简单易用和性能。 Libstroph 是用 c 编写的,所以很容易编写 android makefile,因为依赖项只是 openssl 和 expat lib。在我的例子中,我使用的是 openssl 和 expat lib from libjingle,它们已经可以移植到 android 和 ios。(只需要将 gyp 文件移植到 android makefile 或 IOS 项目)。

下面是我的机器人 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,最近我用一种非常简单的方式实现了一个演示。

- > 在应用程序级别级别中添加级别依赖,如下所示

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

您可以免费使用 QuickBlox1。

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

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

你可以使用 客户端库-它非常多才多艺,你可以在 JavaSE 应用程序和 Android 开发中使用它。它的积极发展和 用于 Android 的 Tigase Messenger(玩具店)是基于它。

有一个 基本库文档维基页面与一对夫妇的例子和详细信息,你应该参考 Javadocs