Android 및 XMPP : 현재 사용 가능한 솔루션
오늘날 Android 개발에 가장 적합한 XMPP 라이브러리는 무엇입니까?
SO의 다른 많은 질문에서 제안 된 것처럼 패치 된 Smack 라이브러리 를 사용하고 있습니다. 그러나 2 년 전의 Smack API 패치 버전입니다. 그리고 그것은 일반적으로 잘 작동하지만 다른 최신 옵션을 탐색하고 있습니다.
나는 공식 Smack API를 살펴 보았고 약간의 연구를 거친 후에도 오늘날에는 제대로 작동 할 수 있습니다 (실제 응용 프로그램에서는 아직 시도하지 않았 음).
또 다른 해결책 인 Beem의 aSMACK 라이브러리도 있습니다. Beem은 안드로이드를위한 상당히 새로운 XMPP 클라이언트이며 내가 패치 한 자체 버전의 aSMACK을 사용한다는 것을 이해합니다.
마지막으로 aSMACK이 있지만 사이트가 제안한대로 꽤 오랫동안 업데이트되지 않았습니다.
다른 제안이 있거나 왜 나머지 중 하나를 선택해야하는지 설명 할 수 있습니까?
헤로인
Smack은 오픈 소스 XMPP 클라이언트 라이브러리입니다. 버전 4.1부터는 기본적으로 Android에서 실행됩니다. 자세한 내용은 "Smack 4.1 읽어보기" 를 살펴보고 Ignite Realtime 의 Smack 프로젝트 페이지를 참조하십시오 . aSmack은 Smack 4.1을 위해 더 이상 사용되지 않으며 더 이상 사용되지 않습니다.
최근에 다른 오픈 소스 솔루션 인 jaxmpp2를 발견했습니다.
jaxmpp2는 Android (및 Java SE)도 대상으로합니다. 내 안드로이드 / XMPP 프로젝트에서 jaxmpp2를 사용하지 않기 때문에 다른 말을 할 수 없습니다. 그러나 aSmack 의 유효한 대안처럼 보입니다 .
Android 용 qsmack 사용
https://code.google.com/p/qsmack/downloads/list
안드로이드를위한 최신 빌드
나는 일대일 채팅, 그룹 채팅, 비디오 전송, 오디오 전송, 마지막으로 본 등록 번호 변경 ... 거의 완전한 whats 응용 프로그램을 작업했습니다. openfire에서 많은 플러그인을 만들었습니다.
libstrophe와 jni를 사용하고 싶습니다. 이것을 사용하는 목표는 크로스 플랫폼, 사용하기 쉽고 성능입니다. libstrophe는 c로 작성되었으므로 종속성은 openssl 및 expat lib이므로 Android makefile을 쉽게 작성할 수 있습니다. 내 경우에는 이미 android 및 ios로 포팅하는 libjingle의 openssl 및 expat lib를 사용하고 있습니다. gyp 파일을 android makefile 또는 IOS 프로젝트로 이식해야합니다.
아래는 내 안드로이드 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)
Tigase JaXMPP 클라이언트 라이브러리를 사용할 수 있습니다. 매우 다양하며 JavaSE 애플리케이션과 Android 개발 모두에 사용할 수 있습니다. 그것은 적극적으로 개발되었으며 안드로이드 용 Tigase Messenger ( Play Store )는 그것을 기반으로합니다.
There is a Basic library documentation wiki page with a couple of examples and for details you should refere to javadocs
Using Smack 4.1 Readme and Upgrade Guide
Using Android studio 2.3, Recently I have implemented a demo in a very simple way.
-> Just Add gradle dependency in app level gradle as below
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
// Optional for XMPPTCPConnection
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
-> Configure Connection Configuration
NOTE : Call this in AsyncTask or in other background thread
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();
-> Use isConnected()
and isAuthenticated()
-> Use ChatManager
for add chatListener
.
You can use QuickBlox1 for free.
It provides XMPP server out of the box with lots of features, you can read about features there http://quickblox.com/developers/Chat
Here is an example how to start using QuickBlox with aSmack library http://quickblox.com/developers/Android_XMPP_Chat_Sample
참고URL : https://stackoverflow.com/questions/4769020/android-and-xmpp-currently-available-solutions
'IT story' 카테고리의 다른 글
전체 폴더와 내용을 삭제하는 방법? (0) | 2020.05.29 |
---|---|
톰캣 VS 부두 (0) | 2020.05.29 |
REST 웹 서비스에서 일괄 작업을 처리하기위한 패턴? (0) | 2020.05.29 |
표준 브라우저 가상 머신이 아닌 왜 JavaScript입니까? (0) | 2020.05.29 |
오류 : R에서… 기능을 찾을 수 없습니다 (0) | 2020.05.29 |