Domanda

biblioteca che XMPP sarebbe la scelta migliore al giorno d'oggi per lo sviluppo di Android?

  • Sto usando il patch Smack biblioteca , come è suggerito in molte altre domande qui a SO. Tuttavia, questa è una versione modificata di l'API Smack di due anni fa. E anche se in generale funziona bene io sono esplorando ogni altro, più recente opzioni.

  • Sono stato a guardare il ufficiale Smack API e dopo un po ' la ricerca, sembra che potrebbe funzionare solo multa al giorno d'oggi (anche se non ho ancora provato in un'applicazione reale).

  • C'è anche un'altra soluzione sono venuto attraverso, biblioteca aSMACK di Beem . Beem è un nuovo client XMPP per Android e da quanto ho capito stanno usando la propria patch versione di aSMACK.

  • Infine, c'è aSMACK , ma che troppo non è stato aggiornato da molto po 'di tempo (come il sito suggerisce).

Avete altri suggerimenti o si può spiegare perché dovrei scegliere una delle opzioni di cui sopra sul resto?

È stato utile?

Soluzione

Smack

Smack è una libreria client XMPP open-source. A partire dalla versione 4.1 che gira nativamente su Android. Per maggiori informazioni date un'occhiata alla "Smack 4.1 Leggimi" e vedere il href="https://www.igniterealtime.org/projects/smack/" rel="noreferrer"> pagina del progetto . aSmack è obsoleto e deprecato a favore di Smack 4.1.

Altri suggerimenti

Recentemente ho inciampato attraverso un'altra soluzione open-source: jaxmpp2

jaxmpp2 rivolge anche Android (e Java SE). Non posso davvero dire altro a riguardo, perché io non uso jaxmpp2 nei miei progetti Android / XMPP. Ma sembra che una valida alternativa ai aSmack .

Usa qsmack per Android

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

La sua l'ultima build di Android

Ho lavorato su 1-1 la chat, chat di gruppo, trasferimento video, trasferimento audio, visto l'ultima volta, il numero di registrazione cambiamento ... che cosa è quasi completa app. Ho creato un sacco di plug-in openfire

Vorrei uso libstrophe e JNI. Obiettivi di utilizzare questo è multipiattaforma, semplice da usare e le prestazioni. libstrophe è scritto in C così, è facile scrivere makefile Android dal momento che la dipendenza è solo openssl e expat lib. Nel mio caso, sto usando OpenSSL e lib expat da libjingle che già porta per Android e iOS. (Solo bisogno di file di porto gyp al makefile Android o IOS del progetto).

Di seguito è riportato il mio Android 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)


È possibile utilizzare Tigase JaXMPP libreria client - è molto versatile e si può utilizzare sia per JavaSE applicazioni così come si sviluppo di Android. E 'attivamente sviluppato e Tigase Messenger per Android ( Play Store ) si basa su di esso.

C'è un documentazione della libreria di base pagina wiki con un paio di esempi e per i dettagli si dovrebbe Riferirsi ai javadocs

Smack 4.1 Leggimi e aggiornamento della versione

Utilizzo di Android 2.3 in studio, recentemente ho implementato un demo in un modo molto semplice.

-> Just Add dipendenza Gradle nel livello di applicazione Gradle come di seguito

compile "org.igniterealtime.smack:smack-tcp:4.1.0"

// Optional for XMPPTCPConnection

compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"

-> Configura connessione
Configurazione Nota : richiamare questo in AsyncTask o in altro thread in background

 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();

-> Usa isConnected() e isAuthenticated()

-.> Usa ChatManager per aggiungere chatListener

È possibile utilizzare QuickBlox1 gratuitamente.

Si fornisce di server XMPP, fuori dalla scatola con un sacco di funzioni, si può leggere su caratteristiche ci http: // quickblox.com/developers/Chat

Ecco un esempio come iniziare ad usare QuickBlox con aSmack biblioteca http://quickblox.com/developers/Android_XMPP_Chat_Sample

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top