Android y XMPP: Actualmente soluciones disponibles [cerrada]
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?
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
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