Android e XMPP: soluzioni attualmente disponibili [chiuso]


165

Quale libreria XMPP sarebbe la scelta migliore al giorno d'oggi per lo sviluppo Android?

  • Sto usando la libreria Smack patchata come è suggerito in molte altre domande qui in SO. Tuttavia, questa è una versione modificata dell'API di Smack di due anni fa. E sebbene generalmente funzioni bene, sto esplorando altre opzioni più recenti.

  • Ho esaminato l' API ufficiale di Smack e dopo un po 'di ricerche, sembra che al giorno d'oggi possa funzionare bene (anche se non l'ho ancora provato in una vera applicazione).

  • C'è anche un'altra soluzione che ho trovato, la libreria aSMACK di Beem . Beem è un client XMPP abbastanza nuovo per Android e da quello che ho capito stanno usando la loro versione patchata di aSMACK.

  • Infine, c'è aSMACK ma anche questo non è stato aggiornato da un po 'di tempo (come suggerisce il sito).

Hai altri suggerimenti o puoi spiegare perché dovrei scegliere uno dei precedenti sopra il resto?


2
Con cosa sei andato alla fine? Sto cercando di decidere se usare lo smack ufficiale o no?
Tom,

2
Solo un ping / nota, ho riaperto questo a favore del duplicato che ha causato la chiusura.
Tim Post

80
Penso che chiudere questa domanda sia un grosso errore . Essendo coinvolto in XMPP su Android, posso dire che è l'unica risorsa affidabile e aggiornata quando si tratta della domanda "Come posso usare XMPP su Android?" su tutta la rete. Chiudendolo, si ottiene un valore di alta qualità da SO. La domanda è rimasta aperta per oltre un anno senza problemi e domande che ponevano lo stesso quando erano chiusi come duplicati che puntavano a questa domanda. Non vedo nemmeno il punto di chiuderlo come "non costruttivo": si basa su un problema del mondo reale, implica fatti e riferimenti. Vedi anche il voto positivo e il conteggio dei preferiti.
Flusso

4
@casperOne Grazie per le spiegazioni del paziente. Mi aiuta a capire dov'è il problema con StackOverflow. Forse lo porterò su meta, ma sembra che questa sia l'opinione della maggioranza ed è stata già discussa molte volte. Semplicemente non sembra giusto, soprattutto perché non è stato chiuso dai voti per anni.
Flusso

4
A parte il mio bisogno di "Come usare XMPP in Android", la discussione tra "Flow" e "casperOne" è più interessante. Ho vagato su internet per xmpp e alla fine della giornata sono qui su questo post che mi fornisce informazioni più specifiche sulle librerie che posso usare per XMPP anche dopo DUE ANNI di OP, è decisamente costruttivo per me e lo sarà a centinaia di principiante per le app di chat. "EVENTI" parla più di "REGOLE" che il punto di vista di "FLUSSO" è corretto su questa chiusura delle domande.
Pankaj,

Risposte:


106

schiaffo

Smack è una libreria client XMPP open source. Dalla versione 4.1 funziona nativamente su Android. Per ulteriori informazioni, dai un'occhiata al file Leggimi di Smack 4.3 e vedi la pagina del progetto Smack su Ignite Realtime .


8
Fusione di Smack 3.2.0 in asmack. Dai un'occhiata ai rami su github :)
Flusso

Commenti modificati> ciao a tutti> Sto usando asmack per sviluppare il mio client xmpp, sto affrontando un problema> Quando vengo dal primo accesso, comincio a chattare con l'utente B e anche a ricevere messaggi dall'utente B va bene. il mio wifi e riaccenderlo quindi ricollegare programmaticamente il mio server jabber e accedere nuovamente al mio account, dopo la riconnessione sto inviando messaggi all'utente B che va bene ma quando l'utente B mi invia messaggi che i messaggi dalla mia parte non ricevono. sapere cosa c'è che non va nella guida
it.plz

ciao Flow> come possiamo unire gli asmack esistenti con gli ultimi smack? o è disponibile da dove posso scaricare asmack con l'ultimo smack?
aftab,

@aftab Come indicato nella mia risposta, asmack e il ramo smack usato possono essere trovati su github. Assicurati di leggere i README su github.
Flusso


6

Di recente mi sono imbattuto in un'altra soluzione open source: jaxmpp2

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


1
puoi per favore descrivere un modo per cominciare, smack library ... questo è totalmente nuovo per me. crea un blog o qualche progetto libaray che i ragazzi con la mente normale possano comprendere correttamente questa libreria.
Tushar Pandey,

Ho trovato un tutorial su developer.samsung.com/android/technical-docs/… che è particolarmente buono, si noti che ci sono alcune piccole modifiche dovute a motivi di compatibilità: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

Usa qsmack per Android

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

È l'ultima build per Android

Ho lavorato su una chat uno a uno, chat di gruppo, trasferimento video, trasferimento audio, ultima visualizzazione, modifica numero di registrazione ... quasi completa quale app. Ho creato molti plugin su openfire


@jaspreet ..... quale usare aSmack / qSmack.
Tushar Pandey,

@jaspreet ... qualsiasi libreria roject per l'integrazione di qsamck in Android
Tushar Pandey,

È tutto cinese e nessun aiuto disponibile.
AZ_


fatemi sapere se vi trovate in qualche problema
Jaspreet Chhabra,

3

Vorrei usare libstrophe e jni. Gli obiettivi da utilizzare sono multipiattaforma, semplici da usare e performanti. libstrophe è scritto in c così, è facile scrivere il makefile di Android poiché la dipendenza è solo openssl ed expat lib. Nel mio caso, sto usando openssl ed espatrio lib da libjingle che già porta su Android e iOS. (Ho solo bisogno di portare il file gyp su Android makefile o progetto IOS).

Di seguito è il mio makefile Android



    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

Utilizzo del file Leggimi di Smack 4.1 e della Guida all'aggiornamento

Utilizzando Android Studio 2.3, di recente ho implementato una demo in modo molto semplice.

-> Basta aggiungere la dipendenza gradle in gradle a livello di app 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 configurazione connessione
NOTA : chiamalo in AsyncTask o in un 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 ChatManagerper aggiungere chatListener.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.