166

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

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

  • 我一直在查看官方的 Smack API,经过一番研究,它现在似乎可以正常工作(尽管我还没有在实际应用程序中尝试过)。

  • 我还遇到了另一个解决方案,Beem 的 aSMACK 库。Beem 是一个相当新的安卓 XMPP 客户端,据我了解,他们正在使用自己的 aSMACK 补丁版本。

  • 最后,还有aSMACK,但也有一段时间没有更新(正如网站所建议的那样)。

您还有其他建议吗,或者您能解释一下为什么我应该选择上述其中一项而不是其他建议吗?

4

7 回答 7

108

咂嘴

Smack 是一个开源 XMPP 客户端库。从 4.1 版开始,它在 Android 上原生运行。有关更多信息,请查看“Smack 4.3 自述文件”并查看Ignite Realtime 的 Smack 项目页面

于 2011-03-30T14:41:05.020 回答
6

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

jaxmpp2 还针对 Android(和 Java SE)。我真的不能说别的,因为我没有在我的 Android/XMPP 项目中使用 jaxmpp2。但它看起来像是aSmack的有效替代品。

于 2013-12-01T10:33:09.903 回答
3

为安卓使用 qsmack

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

它是适用于 Android 的最新版本

我从事过一对一聊天、群聊、视频传输、音频传输、最后一次看到、更改注册号......几乎完成了什么应用程序。我在 openfire 上创建了很多插件

于 2014-04-14T17:04:05.150 回答
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)


于 2015-03-10T10:44:20.840 回答
1

您可以使用Tigase JaXMPP 客户端库- 它非常通用,您可以将它用于 JavaSE 应用程序和 Android 开发。它正在积极开发中,Android 版 Tigase MessengerPlay 商店)基于它。

有一个带有几个示例的基本库文档wiki 页面,有关详细信息,您应该参考javadocs

于 2019-04-09T21:35:34.513 回答
0

您可以免费使用 QuickBlox1。

它为 XMPP 服务器提供了许多开箱即用的功能,您可以在http://quickblox.com/developers/Chat阅读有关功能的信息

这是一个如何开始使用带有 aSmack 库的 QuickBlox 的示例http://quickblox.com/developers/Android_XMPP_Chat_Sample

于 2017-05-31T11:19:22.663 回答
0

使用Smack 4.1 自述文件和升级指南

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

-> 只需在应用级别 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

于 2017-03-29T10:29:20.817 回答