Pregunta

¿Qué biblioteca XMPP sería la mejor opción hoy en día para el desarrollo de Android?

  • He estado usando el parcheado Smack biblioteca como es sugerido en muchas otras preguntas aquí en SO. Sin embargo, esa es una versión parcheada de la API Smack desde hace dos años. Y aunque por lo general funciona bien estoy explorar cualquier otro, más reciente opciones.

  • He estado buscando en la oficial Smack API y después de un poco investigación, parece que podría funcionar multar hoy en día (aunque no he probado todavía en una aplicación real).

  • También hay otra solución que vine de ancho, biblioteca aSMACK de Beem . Beem es bastante un nuevo cliente XMPP para androide y por lo que entiendo están utilizando su propia parcheado versión de aSMACK.

  • Por último, hay aSMACK pero eso también no ha sido actualizado desde hace bastante algún tiempo (como el sitio sugiere).

¿Tiene alguna otra sugerencia o se puede explicar por qué debería elegir uno de los anteriores sobre el resto?

¿Fue útil?

Solución

Smack

Smack es una biblioteca de cliente XMPP de código abierto. Desde la versión 4.1 se ejecuta de forma nativa en Android. Para obtener más información echar un vistazo a la "Smack 4.1 Léame" y vea la página Smack proyecto en Ignite Realtime . aSmack es obsoleto y en desuso en favor de Smack 4.1.

Otros consejos

I recientemente tropezó con otra solución de código abierto: jaxmpp2

jaxmpp2 también apunta a Android (y Java SE). Realmente no puedo decir nada más al respecto, porque yo no uso jaxmpp2 en mis proyectos androide / XMPP. Pero se ve como una alternativa válida a aSmack .

Uso qsmack para android

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

Es la última versión para Android

He trabajado en uno para una conversación iniciada, chat de grupo, transferencia de vídeo, transferencia de audio, visto por última vez, el número de registro del cambio ... cuál es casi completa aplicación. He creado un montón de plugin en Openfire

Me gustaría utilizar libstrophe y JNI. Objetivos de uso Esta es multiplataforma, fácil de usar y rendimiento. libstrophe está escrito en C, de manera, que sea fácil de escribir makefile androide ya que la dependencia se limita openssl y expatriados lib. En mi caso, estoy usando openssl y lib inmigrante de libjingle que ya puerto para Android y iOS. (Sólo necesita presentar puerto gyp a makefile androide o proyecto IOS).

A continuación se muestra mi androide 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)


Se puede usar Tigase JaXMPP biblioteca de clientes - es muy versátil y se puede utilizar tanto para JavaSE aplicaciones, así como el desarrollo de Android. Es desarrollado activamente y Tigase Messenger para Android ( Play Store ) se basa en ella.

Hay una básico biblioteca de documentación página wiki con un par de ejemplos y detalles que debe refere a javadocs

Smack 4.1 Léame y actualización

El uso de Android Studio 2.3, recientemente he implementado una demostración de una manera muy sencilla.

-> apenas añade la dependencia Gradle en Gradle nivel de aplicación de la siguiente manera

compile "org.igniterealtime.smack:smack-tcp:4.1.0"

// Optional for XMPPTCPConnection

compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"

-> Configurar conexión de configuración
Nota: : Llamar a este en AsyncTask o en otro hilo de fondo

 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();

-> Uso isConnected() y isAuthenticated()

-.> Uso ChatManager para chatListener complemento

Se puede utilizar QuickBlox1 de forma gratuita.

Proporciona servidor XMPP fuera de la caja con un montón de características, se puede leer acerca de las características que hay http: // quickblox.com/developers/Chat

Este es un ejemplo de cómo empezar a usar QuickBlox con aSmack biblioteca http://quickblox.com/developers/Android_XMPP_Chat_Sample

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top