Android y XMPP: soluciones disponibles actualmente [cerrado]

165

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

  • He estado usando la biblioteca de Smack parcheada como se sugiere en muchas otras preguntas aquí en SO. Sin embargo, esa es una versión parcheada de la API de Smack de hace dos años. Y aunque generalmente funciona bien, estoy explorando otras opciones más recientes.

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

  • También encontré otra solución, la biblioteca aSMACK de Beem . Beem es un cliente XMPP bastante nuevo para Android y, por lo que entiendo, están usando su propia versión parcheada de aSMACK.

  • Finalmente, hay un ASOMBROS, pero eso tampoco se ha actualizado durante bastante tiempo (como sugiere el sitio).

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

Alcar
fuente
2
¿Con qué fuiste al final? ¿Estoy tratando de decidir si usar un golpe oficial o no?
Tom
2
Solo un ping / nota, he vuelto a abrir esto a favor del duplicado que hizo que se cerrara.
Tim Post
80
Creo que cerrar esta pregunta es un gran error . Al estar involucrado en XMPP en Android, puedo decir que es el único recurso confiable y actualizado cuando se trata de la pregunta "¿Cómo puedo usar XMPP en Android?" en toda la red. Al cerrarlo, obtiene un valor de alta calidad de SO. La pregunta estuvo abierta durante más de un año sin problemas y las preguntas que hicieron lo mismo se cerraron como duplicados que apuntan a esta pregunta. Ni siquiera veo el punto de cerrarlo como "no constructivo": se basa en un problema del mundo real, involucra hechos y referencias. Ver también upvote y fav count.
Flujo
44
@casperOne Gracias por sus explicaciones pacientes. Me ayuda a comprender dónde está el problema con stackoverflow. Tal vez mencionaré esto en meta, pero parece que esta es la opinión de la mayoría y ya se discutió muchas veces. Simplemente no se siente bien, especialmente porque no estuvo cerrado por votos durante años.
Flujo
44
Además de mi necesidad de "Cómo usar XMPP en Android", la discusión entre "Flow" y "casperOne" es más interesante. Paseé por internet para xmpp y al final del día estoy aquí en esta publicación que me proporciona información más específica sobre las bibliotecas que puedo usar para XMPP incluso después de DOS AÑOS de OP, definitivamente es constructiva para mí y será de cientos de novato para aplicaciones de chat. "EVENTOS" habla más que "REGLAS" de que el punto de vista de "FLUJO" es correcto sobre el cierre de estas preguntas.
Pankaj

Respuestas:

106

Tortazo

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, consulte el "Léame de Smack 4.3" y consulte la página del proyecto Smack en Ignite Realtime .

Fluir
fuente
8
Smack 3.2.0 fusionado en asmack. Echa un vistazo a las ramas en github :)
Flujo
Comentarios editados> hola a todos> Estoy usando asmack para desarrollar mi cliente xmpp, me enfrento a un problema> Cuando vengo desde la primera vez que inicio de sesión, comienzo a chatear con el usuario B y recibo mensajes del usuario B, eso también está bien. mi wifi y volver a encenderlo, luego volver a conectar programáticamente mi servidor jabber y volver a iniciar sesión en mi cuenta, después de volver a conectar estoy enviando mensajes al usuario B, eso está bien, pero cuando el usuario B me envía mensajes que los mensajes de mi lado no reciben. saber lo que es que está mal con it.plz guía
aftab
hola Flow> ¿cómo podemos fusionar un asmack existente con el último golpe? ¿o está disponible desde donde puedo descargar un Asmack con el último golpe?
aftab
@aftab Como se indicó en mi respuesta, se puede encontrar asmack y la rama de golpe utilizada en github. Asegúrate de leer los README's en github.
Flujo
6

Recientemente me topé 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 no uso jaxmpp2 en mis proyectos Android / XMPP. Pero parece una alternativa válida a aSmack .

Fluir
fuente
1
¿podría describir alguna forma de empezar, smack library ... esto es totalmente nuevo para mí? crea un blog o algún proyecto libaray para que los chicos con mente normal puedan entender esta biblioteca correctamente.
Tushar Pandey
Encontré un tutorial en developer.samsung.com/android/technical-docs/… que es especialmente bueno, tenga en cuenta que requiere algunas pequeñas modificaciones debido a razones de compatibilidad: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin
3

Use qsmack para Android

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

Es la última compilación para Android

He trabajado en chat uno a uno, chat grupal, transferencia de video, transferencia de audio, visto por última vez, cambiar el número de registro ... casi completa cuál es la aplicación. He creado muchos complementos en openfire

Jaspreet Chhabra
fuente
@jaspreet ..... cuál usar aSmack / qSmack.
Tushar Pandey
@jaspreet ... cualquier proyecto de biblioteca para integrar qsamck en Android
Tushar Pandey
Todo es chino y no hay ayuda disponible.
AZ_
avíseme si tiene algún problema
Jaspreet Chhabra
3

Me gustaría usar libstrophe y jni. Los objetivos para usar esto son multiplataforma, fácil de usar y de rendimiento. libstrophe está escrito en c, por lo que es fácil escribir el archivo MAKE de Android ya que la dependencia es solo openssl y expat lib. En mi caso, estoy usando openssl y expat lib de libjingle que ya tiene puerto para android e ios. (Solo es necesario portar el archivo gyp al archivo make de Android o al proyecto IOS).

Debajo está mi makefile de Android



    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)


nguyentran
fuente
0

Uso del archivo Léame y la Guía de actualización de Smack 4.1

Usando Android Studio 2.3, recientemente he implementado una demostración de una manera muy simple.

-> Simplemente agregue dependencia de gradle en el nivel de aplicación gradle como se muestra a continuación

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

// Optional for XMPPTCPConnection

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

-> Configurar configuración de conexión
NOTA : llame a esto 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()

-> Usar ChatManagerpara agregar chatListener.

Tarun Dholakiya
fuente