Android и XMPP: доступные решения
Какая библиотека XMPP будет лучшим выбором в настоящее время для разработки Android?
-
Я использовал исправленный Smack
библиотека, как есть
предлагается во многих других вопросах
здесь, в SO. Однако, что исправленная версия
API Smack два года назад. А также
хотя он, как правило, хорошо работает, я
изучение других, более поздних
варианты.
-
Я смотрел на официальный
Smack API и после небольшого
исследования, похоже, это может
хорошо сейчас (хотя у меня нет
попробовал еще в реальном приложении).
-
Там также было другое решение
через Beem aSMACK library.
Beem - довольно новый клиент XMPP для
андроид и от того, что я понимаю
они используют свои собственные исправленные
версия aSMACK.
-
Наконец, там aSMACK, но это
тоже не обновился
некоторое время (как предполагает сайт).
Есть ли у вас какие-либо другие предложения или вы можете объяснить, почему я должен выбрать один из вышеперечисленных над остальными?
Ответы
Ответ 1
Smack - это клиентская библиотека XMPP с открытым исходным кодом. Начиная с версии 4.1 он запускается изначально на Android. Для получения дополнительной информации см. "Smack 4.1 Readme" и см. Smack project page в Ignite Realtime. aSmack устарел и устарел в пользу Smack 4.1.
Ответ 2
Недавно я наткнулся на другое решение с открытым исходным кодом: jaxmpp2
jaxmpp2 также нацелен на Android (и Java SE). Я ничего не могу сказать об этом, потому что я не использую jaxmpp2 в моих проектах Android/XMPP. Но он выглядит как действительная альтернатива aSmack.
Ответ 3
Использовать qsmack для android
https://code.google.com/p/qsmack/downloads/list
Последняя версия для Android
Я работал над одним чатом, групповым чатом, передачей видео, аудиопередачей, последним замеченным, меняющим регистрационный номер... почти полным, что приложение. Я создал много плагина на openfire
Ответ 4
Я хотел бы использовать libstrophe и jni. Цели использования этого кросс-платформенного, простого в использовании и производительности.
libstrophe написан на c, поэтому легко написать makefile makefile, так как зависимость - это только openssl и expat lib. В моем случае я использую openssl и expat lib из libjingle, которые уже порт для android и ios. (Просто нужно передать gyp файл в make файл android или проект IOS).
Ниже мой makefile 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
Использование Руководство по чтению и обновлению Smack 4.1
Использование Android studio 2.3, недавно я внедрил демонстрацию очень простым способом.
- > Просто добавьте зависимость 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 happening in detail
.build();
- > Используйте isConnected()
и isAuthenticated()
- > Используйте ChatManager
для добавления chatListener
.
Ответ 6
Вы можете использовать QuickBlox1 бесплатно.
Он предоставляет сервер XMPP из коробки с множеством функций, вы можете прочитать о функциях там http://quickblox.com/developers/Chat
Вот пример, как начать использовать QuickBlox с библиотекой aSmack http://quickblox.com/developers/Android_XMPP_Chat_Sample
Ответ 7
Вы можете использовать клиентскую библиотеку Tigase JaXMPP - она очень универсальна, и вы можете использовать ее как для приложений JavaSE, так и для разработки Android. Он активно развивается, и на его основе основан Tigase Messenger для Android (Play Store).
Существует вики-страница с документацией по базовой библиотеке с парой примеров, и для подробностей вы должны обратиться к javadocs