Android 및 XMPP : 현재 사용 가능한 솔루션 [닫기]


165

오늘날 Android 개발에 가장 적합한 XMPP 라이브러리는 무엇입니까?

  • SO의 다른 많은 질문에서 제안 된 것처럼 패치 된 Smack 라이브러리 를 사용하고 있습니다. 그러나 2 년 전의 Smack API 패치 버전입니다. 그리고 그것은 일반적으로 잘 작동하지만 다른 최신 옵션을 탐색하고 있습니다.

  • 나는 공식 Smack API를 살펴 보았고 약간의 연구를 거친 후에도 오늘날에는 제대로 작동 할 수 있습니다 (실제 응용 프로그램에서는 아직 시도하지 않았 음).

  • 또 다른 해결책 인 Beem의 aSMACK 라이브러리도 있습니다. Beem은 안드로이드를위한 상당히 새로운 XMPP 클라이언트이며, 그들이 패치 한 자체 버전의 aSMACK을 사용하고 있음을 이해합니다.

  • 마지막으로 aSMACK이 있지만 사이트가 제안한대로 꽤 오랫동안 업데이트되지 않았습니다.

다른 제안이 있거나 왜 나머지 중 하나를 선택해야하는지 설명 할 수 있습니까?


2
결국 무엇을 했습니까? 공식적인 헤로인 사용 여부를 결정하려고합니까?
Tom

2
단지 핑 / 노트, 이것을 닫은 복제본을 선호하여 이것을 다시 열었습니다.
Tim Post

80
이 질문을 끝내는 것은 큰 실수 라고 생각합니다 . 그게 아니라 말할 수있는 안드로이드 I에 XMPP에 관련되는 신뢰성최신의에 이 문제에 관해서 자원 "나는 안드로이드에 XMPP를 사용할 수 있습니까?" 전체 그물에. 그것을 닫으면 SO에서 높은 가치를 얻습니다. 이 질문은 1 년 이상 문제없이 열렸으며이 질문을 가리키는 복제본으로 마감 된 곳과 동일한 질문을했습니다. 나는 그것을 건설적이지 않은 것으로 닫는 점조차 보지 못합니다. 그것은 실제 문제에 기초하고 있으며 사실과 참조를 포함합니다. 공감 및 즐겨 찾기 수를 참조하십시오.
Flow

4
@casperOne 환자 설명에 감사드립니다. stackoverflow의 문제가 어디에 있는지 이해하는 데 도움이됩니다. 어쩌면 나는 이것을 메타로 가져올 것이지만 이것은 대다수의 의견이며 이미 여러 번 논의 된 것 같습니다. 특히 수년 동안 투표로 닫히지 않았기 때문에 옳지 않은 느낌입니다.
흐름

4
"안드로이드에서 XMPP를 사용하는 방법"에 대한 나의 필요 외에도 "Flow"와 "casperOne"사이의 토론이 더 흥미 롭습니다. 나는 xmpp를 위해 인터넷에서 방황했으며 하루가 끝날 무렵 에이 게시물에 올랐습니다.이 게시물은 OP의 2 년이 지난 후에도 XMPP에 사용할 수있는 라이브러리에 대한 더 구체적인 정보를 제공합니다. 채팅 앱 초보자입니다. "이벤트"는 "규칙"이상으로 "유량"관점이이 질문 종결에 대해 맞다고 말합니다.
Pankaj

답변:


106

헤로인

Smack은 오픈 소스 XMPP 클라이언트 라이브러리입니다. 버전 4.1부터는 기본적으로 Android에서 실행됩니다. 자세한 내용은 "Smack 4.3 읽어보기" 를 살펴보고 Ignite RealtimeSmack 프로젝트 페이지를 참조하십시오 .


8
Smack 3.2.0을 asmack에 병합했습니다. github에서 분기를 확인하십시오 :)
Flow

편집 된 의견> 안녕 모두> xmpp 클라이언트 개발을 위해 asmack을 사용하고 있습니다, 문제가 있습니다> 처음 로그인 할 때 사용자 B와 채팅을 시작하고 사용자 B로부터 메시지를 수신하는 것도 좋습니다. 내 wifi를 켜고 다시 켠 다음 프로그래밍 방식으로 재버 서버를 다시 연결하고 다시 계정에 로그인 한 후 다시 연결 한 후 사용자 B에게 메시지를 보내고 있지만 사용자 B가 메시지를 보내면 내 쪽의 메시지를받지 못합니다. plz 가이드
aftab

안녕 흐름> 어떻게 기존의 애맥을 최신 스맥과 병합 할 수 있습니까? 또는 최신 스맥으로 asmack을 다운로드 할 수있는 곳이 어디 있습니까?
aftab

@aftab 내 대답에서 언급했듯이 asmack 과 사용 된 smack 브랜치 는 github에서 찾을 수 있습니다. github의 README를 읽으십시오.
흐름


6

최근에 다른 오픈 소스 솔루션 인 jaxmpp2를 발견했습니다.

jaxmpp2는 Android (및 Java SE)도 대상으로합니다. 내 안드로이드 / XMPP 프로젝트에서 jaxmpp2를 사용하지 않기 때문에 다른 말을 할 수 없습니다. 그러나 aSmack 의 유효한 대안처럼 보입니다 .


1
, smack library ...로 시작하는 방법을 설명해 주시겠습니까? 이것은 완전히 새로운 것입니다. 평범한 사람들이이 라이브러리를 제대로 이해할 수있는 블로그 나 libaray_project를 만드십시오.
Tushar Pandey

developer.samsung.com/android/technical-docs/ 에서 튜토리얼을 찾았습니다. 특히 유용합니다. 호환성 이유로 인해 약간의 수정이 필요합니다. stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

Android 용 qsmack 사용

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

안드로이드를위한 최신 빌드

나는 일대일 채팅, 그룹 채팅, 비디오 전송, 오디오 전송, 마지막으로 본 등록 번호 변경 ... 거의 완전한 whats 응용 프로그램을 작업했습니다. openfire에서 많은 플러그인을 만들었습니다.


@jaspreet ..... 어느 것이 aSmack / qSmack을 사용합니다.
Tushar Pandey

@jaspreet ... 안드로이드에 qsamck를 통합하기위한 모든 라이브러리 roject
Tushar Pandey

모두 중국어이며 도움이 없습니다.
AZ_


문제가 발생하면 알려주세요
Jaspreet Chhabra

3

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)




0

사용 헤로인 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's happening in detail
                    .build();

-> 사용 isConnected()isAuthenticated()

-> ChatManageradd에 사용 하십시오 chatListener.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.