servidor - xmpp android client open source
Android y XMPP: soluciones disponibles actualmente (6)
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, eche un vistazo al "Léame de Smack 4.1" y vea la página del proyecto Smack en Ignite Realtime . aSmack está obsoleto y obsoleto a favor de Smack 4.1.
¿Qué biblioteca de 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.
Estuve mirando la API oficial de Smack y después de investigar un poco, 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, según tengo entendido, utilizan su propia versión parcheada de aSMACK.
Finalmente, hay aSMACK 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?
Me gustaría usar libstrophe y jni. Las metas 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 solo es openssl y expat lib. En mi caso, estoy usando openssl y expat lib de libjingle, que ya porto a android e ios. (Solo necesita portar el archivo gyp al archivo makefile de Android o IOS).
Debajo está mi archivo make 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)
Puedes usar QuickBlox1 gratis.
Proporciona un servidor XMPP listo para usar con muchas características, puede leer sobre las funciones allí http://quickblox.com/developers/Chat
Aquí hay un ejemplo de cómo comenzar a usar QuickBlox con una biblioteca deShack http://quickblox.com/developers/Android_XMPP_Chat_Sample
Usa qsmack para android
https://code.google.com/p/qsmack/downloads/list
Es la última versión para Android
He trabajado en el chat uno a uno, chat en grupo, transferencia de video, transferencia de audio, visto por última vez, cambio de número de registro ... casi completa cuál es la aplicación. He creado muchos complementos en firefire
Utilizando el Léame de Smack 4.1 y la Guía de actualización
Utilizando Android studio 2.3, recientemente he implementado una demostración de una manera muy simple.
-> Simplemente agregue la dependencia de gradle en gradle de nivel de aplicación 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 la configuración de conexión
NOTA : Llámalo 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();
-> Usar isConnected()
y isAuthenticated()
-> Use ChatManager
para agregar chatListener
.