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


165

如今,哪个XMPP库将是Android开发的最佳选择?

  • 我一直在使用修补的Smack库,如本文其他许多问题所建议的那样。但是,这是两年前Smack API的补丁版本。尽管总体上效果不错,但我正在探索其他任何最新的选择。

  • 我一直在研究官方的Smack API,经过一些研究,现在看来它可能还不错(尽管我还没有在实际的应用程序中尝试过)。

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

  • 最后,有一个aSMACK,但也有相当长的一段时间没有更新(如网站所建议)。

您还有其他建议吗?您是否可以解释为什么我应该选择以上其中一项?


2
最后你做了什么?我正在尝试决定是否使用官方贴子?
汤姆(Tom)

2
只是ping /便笺,我已重新打开此菜单,以便使用导致关闭此菜单的重复项。
Tim Post

80
我认为解决这个问题是一个大错误。在谈到“如何在Android上使用XMPP?”这个问题时,我可以说这是唯一可靠最新的资源。在整个网络上。通过关闭它,您可以从SO中获得高质量的价值。这个问题开放了一年多,没有任何问题,并且问题的重复位置与指向该问题的重复问题相同。我什至看不到关闭它的意义是“非建设性的”:它基于现实世界的问题,涉及事实和参考。另请参见upvote和fav count。
流程

4
@casperOne感谢您耐心的解释。它可以帮助我了解stackoverflow的问题所在。也许我会在meta上提到这一点,但是似乎这是大多数人的意见,并且已经讨论了很多次。只是感觉不对,特别是因为它多年没有被投票关闭。
流动

4
除了需要“如何在Android中使用XMPP”之外,“ Flow”和“ casperOne”之间的讨论更加有趣。我在互联网上徘徊了xmpp,最终我在此发布了这篇文章,该文章为我提供了即使在OP的两年后,也可以用于XMPP的库的更多具体信息,对我来说绝对具有建设性,并且将成百上千新手聊天应用程序。在这个问题的解决过程中,“事件”比“规则”更能说明“流”的观点是正确的。
Pankaj 2013年

Answers:


106

m

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


8
将Smack 3.2.0合并为asmack。在github上查看分支:)
流程

编辑的评论>大家好>我正在使用asmack开发我的xmpp客户端,我遇到了一个问题>当我第一次登录时,我开始与用户B聊天并从用户B接收消息,这也很好。我关闭我的wifi并再次打开它,然后以编程方式重新连接我的jabber服务器并再次登录我的帐户,重新连接后,我正在向用户B发送消息,这很好,但是当用户B向我发送消息时,我这一边的消息没有收到。我没有知道it.plz有什么问题
aftab 2012年

您好Flow>我们如何将现有的asmack与最新的smack合并?还是availabel从哪里可以下载具有最新smack的asmack?
2012年

@aftab如我的回答所述,可以在github上找到asmack和使用的smack分支。确保阅读github上的自述文件。
流动


6

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

jaxmpp2还针对Android(和Java SE)。我真的不能说别的什么,因为我不在Android / XMPP项目中使用jaxmpp2。但这似乎是aSmack的有效替代方案。


1
您能描述一下smack库开始的任何方式吗?。这对我来说是全新的。请创建一个博客或一些libaray_project,有头脑的人可以正确理解这个库。
Tushar Pandey 2014年

我发现了一个教程developer.samsung.com/android/technical-docs/...这是特别好,注意,有一些小的修改,由于兼容性原因调用:stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

为Android使用qsmack

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

它是Android的最新版本

我曾经进行一对一聊天,群组聊天,视频传输,音频传输,最后一次见到,更改注册号...几乎完成了Whats App。我在openfire上创建了很多插件


@jaspreet .....使用aSmack / qSmack的哪一个。
Tushar Pandey 2014年

@jaspreet ...任何将qsamck集成到android中的库程序
Tushar Pandey

全部都是中文,没有可用的帮助。
2014年


让我知道如果您遇到任何问题
Jaspreet Chhabra 2014年

3

我想使用libstrophe和jni。使用此工具的目标是跨平台,易于使用和性能。libstrophe是用c编写的,因为依赖项仅是openssl和expat lib,因此很容易编写android makefile。就我而言,我使用的是来自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)




0

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.