Android e XMPP: soluções atualmente disponíveis [fechado]

165

Qual biblioteca XMPP seria a melhor opção hoje para o desenvolvimento do Android?

  • Eu tenho usado a biblioteca Smack corrigida, como é sugerido em muitas outras perguntas aqui no SO. No entanto, essa é uma versão corrigida da API Smack de dois anos atrás. E, embora geralmente funcione bem, estou explorando outras opções mais recentes.

  • Eu estive analisando a API oficial do Smack e, depois de algumas pesquisas, parece que pode funcionar muito bem hoje em dia (embora eu ainda não tenha tentado em um aplicativo real).

  • Também encontrei outra solução, a biblioteca aSMACK do Beem . Beem é um cliente XMPP relativamente novo para Android e, pelo que entendi, eles estão usando sua própria versão corrigida do aSMACK.

  • Finalmente, existe o aSMACK, mas isso também não é atualizado há algum tempo (como o site sugere).

Você tem outras sugestões ou pode explicar por que devo escolher uma das opções acima sobre as demais?

alkar
fonte
2
Com o que você foi no final? Eu estou tentando decidir se deve usar o tapa oficial ou não?
Tom
2
Apenas um ping / nota, eu reabri isso em favor da duplicata que causou o fechamento.
Tim Post
80
Eu acho que encerrar esta questão é um grande erro . Participando do XMPP no Android, posso dizer que esse é o único recurso confiável e atualizado quando se trata da pergunta "Como posso usar o XMPP no Android?" em toda a rede. Ao fechá-lo, você obtém um valor de alta qualidade da SO. A pergunta ficou aberta por mais de um ano sem problemas e as perguntas que foram feitas foram encerradas como duplicatas apontando para essa pergunta. Eu nem vejo o ponto de fechá-lo como "não construtivo": é baseado em um problema do mundo real, envolve fatos e referências. Veja também votos positivos e contagem de favoritos.
Flow
4
@casperOne Obrigado pelas explicações dos pacientes. Isso me ajuda a entender onde está o problema com o stackoverflow. Talvez eu traga isso à meta, mas parece que essa é a opinião da maioria e já foi discutida várias vezes. Simplesmente não parece certo, especialmente porque não foi fechado por votos por anos.
Flow
4
Além da minha necessidade de "Como usar o XMPP no Android", a discussão entre "Flow" e "casperOne" é mais interessante. Eu vaguei na internet pelo xmpp e no final do dia estou aqui neste post, que está fornecendo informações mais específicas sobre bibliotecas que posso usar para o XMPP, mesmo depois de DOIS ANOS de OP, é definitivamente construtivo para mim e será de centenas de novato para aplicativos de bate-papo. "EVENTS" fala mais do que "REGRAS" que o ponto de vista de "FLOW'S" está correto sobre o fechamento dessas perguntas.
Pankaj

Respostas:

106

Smack

Smack é uma biblioteca cliente de código-fonte XMPP. Desde a versão 4.1, ele roda nativamente no Android. Para obter mais informações, consulte o "Leiame do Smack 4.3" e consulte a página do projeto do Smack em Ignite Realtime .

Fluxo
fonte
8
Mesclou o Smack 3.2.0 no asmack. Verifique os ramos no github :)
Flow
Comentários editados> oi pessoal> Estou usando o asmack para desenvolver meu cliente xmpp, estou enfrentando um problema> Quando venho do primeiro acesso pela primeira vez, inicio minhas conversas com o usuário B e recebo mensagens do usuário B também, tudo bem. meu wifi e ligá-lo novamente, em seguida, reconectando programaticamente meu servidor jabber e logon novamente em minha conta, após reconectar, estou enviando mensagens para o usuário B que está bom, mas quando o usuário B está enviando mensagens que as mensagens do meu lado não estão recebendo. saber o que está errado com it.plz guia
aftab
oi Flow> como podemos mesclar o asmack existente com o último smack? ou é availabel de onde eu posso baixar asmack com o último smack?
aftab
@aftab Como indicado na minha resposta, o asmack e o ramo smack usado podem ser encontrados no github. Certifique-se de ler os README no github.
Fluxo
6

Recentemente, deparei com outra solução de código aberto: jaxmpp2

O jaxmpp2 também tem como alvo o Android (e o Java SE). Eu realmente não posso dizer mais nada sobre isso, porque eu não uso o jaxmpp2 nos meus projetos Android / XMPP. Mas parece uma alternativa válida ao aSmack .

Fluxo
fonte
1
você pode descrever alguma maneira de começar, smack library .... isso é totalmente novo para mim. crie um blog ou algum libaray_project que pessoas com a mente normal possam entender corretamente esta biblioteca.
Tushar Pandey
Encontrei um tutorial em developer.samsung.com/android/technical-docs/…, que é especialmente bom, observe que há algumas pequenas modificações devido a motivos de compatibilidade: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin
3

Use qsmack para android

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

É a versão mais recente para Android

Eu trabalhei em um para um bate-papo, bate-papo em grupo, transferência de vídeo, transferência de áudio, visto pela última vez, alterar número de registro ... quase completo o que é app. Eu criei muitos plugins no openfire

Jaspreet Chhabra
fonte
@jaspreet ..... qual usar o aSmack / qSmack.
Tushar Pandey
@jaspreet ... qualquer rojecto biblioteca para integrar qsamck no android
Tushar Pandey
É tudo chinês e não há ajuda disponível.
AZ_
deixe-me saber se você enfrentar qualquer problema no que
Jaspreet Chhabra
3

Eu gostaria de usar libstrophe e jni. Os objetivos para usar isso são multiplataforma, simples de usar e desempenho. libstrophe é escrito em c, então é fácil escrever makefile para Android, já que a dependência é apenas openssl e expat lib. No meu caso, estou usando a lib openssl e expat da libjingle, que já possui porta para android e ios. (Só precisa portar o arquivo gyp para o makefile do Android ou o projeto IOS).

Abaixo está o meu 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)


nguyentran
fonte
0

Usando o Smack 4.1 Leia-me e guia de atualização

Usando o Android studio 2.3, recentemente implementei uma demonstração de uma maneira muito simples.

-> Basta adicionar dependência gradle no gradle no nível do aplicativo, conforme abaixo

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

// Optional for XMPPTCPConnection

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

-> Configurar a configuração da conexão
NOTA : chame isso no AsyncTask ou em outro thread em segundo plano

 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()e isAuthenticated()

-> Use ChatManagerpara adicionar chatListener.

Tarun Dholakiya
fonte