【问题标题】:Android and XMPP: Currently available solutions [closed]Android 和 XMPP:当前可用的解决方案 [关闭]
【发布时间】:2011-06-13 17:33:30
【问题描述】:

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

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

  • 我一直在看official Smack API,过了一会儿 研究,似乎它可能只管用 现在很好(虽然我没有 在实际应用中尝试过)。

  • 我还有另一个解决方案 对面,Beem's aSMACK library。 Beem 是一个相当新的 XMPP 客户端 android,据我了解 他们正在使用自己的补丁 aSMACK 版本。

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

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

【问题讨论】:

  • 你最后用了什么?我正在决定是否使用官方smack?
  • 只是一个 ping / 注释,我已经重新打开了这个以支持导致它被关闭的副本。
  • 我认为结束这个问题是一个大错误。参与 Android 上的 XMPP,当谈到“如何在 Android 上使用 XMPP?”这个问题时,我可以说这是唯一的可靠最新资源。在整个网络上。通过关闭它,您可以从 SO 中获得高质量的价值。这个问题已经开放了一年多,没有问题,并且问题与指向该问题的重复项的关闭位置相同。我什至不认为将其关闭为“没有建设性”的意义:它基于现实世界的问题,涉及事实和参考。另请参阅点赞数和收藏数。
  • @casperOne 感谢您耐心的解释。它帮助我理解 stackoverflow 的问题在哪里。也许我会在元数据上提出这个问题,但似乎这是大多数人的意见,并且已经讨论过很多次了。感觉不太对劲,尤其是因为它多年来没有被投票关闭。
  • 除了我需要“如何在android中使用XMPP”之外,“Flow”和“casperOne”之间的讨论更有趣。我在互联网上为 xmpp 徘徊,最终我来到了这篇文章,它为我提供了更多关于我可以用于 XMPP 的库的具体信息,即使在两年的 OP 之后,这对我来说绝对是有建设性的,而且会是数百人聊天应用程序的新手。 “事件”比“规则”更能说明“流动”的观点在这个问题结束时是正确的。

标签: android xmpp smack asmack


【解决方案1】:

Smack

Smack 是一个开源 XMPP 客户端库。从 4.1 版开始,它在 Android 上原生运行。如需更多信息,请查看"Smack 4.3 Readme" 并查看Smack project page at Ignite Realtime

【讨论】:

  • 将 Smack 3.2.0 合并到 asmack 中。查看 github 上的分支 :)
  • Edited cmets > 大家好 > 我正在使用 asmack 开发我的 xmpp 客户端,我遇到了一个问题 > 当我第一次登录时,我开始与用户 B 聊天并接收来自用户 B 的消息也很好。我关闭我的 wifi 并再次打开它,然后以编程方式重新连接我的 jabber 服务器并再次登录我的帐户,重新连接后我正在向用户 B 发送消息,这很好,但是当用户 B 向我发送消息时,我的消息一方没有收到。我不知道它有什么问题。请指导
  • hi Flow > 我们如何将现有的 asmack 与最新的 smack 合并?或者我可以从哪里下载带有最新smack的asmack?
  • @aftab 正如我在回答中所说,asmack 和使用过的smack branch 可以在 github 上找到。请务必阅读 github 上的 README。
【解决方案2】:

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

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

【讨论】:

【解决方案3】:

在安卓上使用 qsmack

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

它是 Android 的最新版本

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

【讨论】:

  • @jaspreet ..... 使用哪一个 aSmack / qSmack。
  • @jaspreet ... 任何用于在 android 中集成 qsamck 的库项目
  • 全是中文,没有帮助。
  • 如果您遇到任何问题,请告诉我
【解决方案4】:

我想使用 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)

【讨论】:

    【解决方案5】:

    您可以使用Tigase JaXMPP Client Library - 它非常通用,您可以将它用于JavaSE 应用程序以及Android 开发。它正在积极开发中,Tigase Messenger for Android (Play Store) 就是基于它。

    有一个Basic library documentation wiki 页面,其中包含几个示例,有关详细信息,您应该参考javadocs

    【讨论】:

    • 这是付费的。 ?
    • 它是免费和开源的
    【解决方案6】:

    使用Smack 4.1 Readme and Upgrade Guide

    使用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

    【讨论】:

    • 知道如何将它与 FCM XMPP 一起使用吗?
    【解决方案7】:

    您可以免费使用 QuickBlox1。

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2015-08-22
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多