Android et XMPP: solutions actuellement disponibles [fermé]


165

Quelle bibliothèque XMPP serait le meilleur choix de nos jours pour le développement Android?

  • J'ai utilisé la bibliothèque Smack corrigée comme cela est suggéré dans de nombreuses autres questions ici dans SO. Cependant, il s'agit d'une version corrigée de l'API Smack d'il y a deux ans. Et bien que cela fonctionne généralement bien, j'explore d'autres options plus récentes.

  • J'ai regardé l' API officielle Smack et après quelques recherches, il semble que cela fonctionne très bien de nos jours (bien que je ne l'ai pas encore essayé dans une application réelle).

  • Il y a aussi une autre solution que j'ai rencontrée, la bibliothèque aSMACK de Beem . Beem est un client XMPP assez récent pour Android et d'après ce que j'ai compris, ils utilisent leur propre version corrigée de aSMACK.

  • Enfin, il y a aSMACK mais cela n'a pas non plus été mis à jour depuis un certain temps (comme le suggère le site).

Avez-vous d'autres suggestions ou pouvez-vous expliquer pourquoi je devrais choisir l'une des options ci-dessus plutôt que les autres?


2
Qu'est-ce que tu as fait à la fin? J'essaie de décider d'utiliser ou non le smack officiel?
Tom

2
Juste un ping / note, je l'ai rouvert en faveur du duplicata qui a provoqué sa fermeture.
Tim Post

80
Je pense que clore cette question est une grave erreur . Être impliqué dans XMPP sur Android, je peux dire que c'est la seule ressource fiable et à jour quand il s'agit de la question "Comment puis-je utiliser XMPP sur Android?" sur l'ensemble du net. En le fermant, vous prenez une valeur de haute qualité de SO. La question était ouverte pendant plus d'un an sans problèmes et questions qui posaient la même question où fermées comme des doublons pointant vers cette question. Je ne vois même pas l'intérêt de le fermer comme "non constructif": il est basé sur un problème du monde réel, implique des faits et des références. Voir aussi les votes positifs et le nombre de favoris.
Débit le

4
@casperOne Merci pour vos explications patientes. Cela m'aide à comprendre où se situe le problème du stackoverflow. Peut-être que je vais évoquer cela sur méta, mais il semble que ce soit l'opinion de la majorité et a déjà été discuté à plusieurs reprises. Cela ne semble pas juste, d'autant plus qu'il n'a pas été fermé par des votes pendant des années.
Débit le

4
En dehors de mon besoin de "Comment utiliser XMPP sous Android", la discussion entre "Flow" et "casperOne" est plus intéressante. J'ai erré sur internet pour xmpp et en fin de compte je suis ici sur ce post qui me fournit des informations plus spécifiques sur les bibliothèques que je peux utiliser pour XMPP même après DEUX ANS OP, est définitivement constructif pour moi et le sera à des centaines de débutant pour les applications de chat. "EVENTS" en dit plus que "REGLES" que le point de vue de "FLOW'S" est correct sur la clôture de cette question.
Pankaj du

Réponses:


106

Claque

Smack est une bibliothèque cliente XMPP open source. Depuis la version 4.1, il fonctionne nativement sur Android. Pour plus d'informations, consultez le "Lisez-moi Smack 4.3" et consultez la page du projet Smack sur Ignite Realtime .


8
Fusion de Smack 3.2.0 dans asmack. Découvrez les branches sur github :)
Flux du

Commentaires modifiés> salut à tous> J'utilise asmack pour développer mon client xmpp, je suis confronté à un problème mon wifi et allumez-le à nouveau, puis reconnectez par programme mon serveur jabber et connectez à nouveau mon compte, après la reconnexion, j'envoie des messages à l'utilisateur B, c'est bien mais lorsque l'utilisateur B m'envoie des messages que les messages de mon côté ne reçoivent pas. savoir ce qui ne va pas avec it.plz guide
aftab

Salut Flow> comment fusionner l'asmack existant avec le dernier smack? ou il est disponible d'où je peux télécharger asmack avec le dernier smack?
aftab

@aftab Comme indiqué dans ma réponse, asmack et la branche smack utilisée peuvent être trouvés sur github. Assurez-vous de lire le README sur github.
Débit


6

Je suis récemment tombé sur une autre solution open-source: jaxmpp2

jaxmpp2 cible également Android (et Java SE). Je ne peux vraiment rien dire d'autre à ce sujet, car je n'utilise pas jaxmpp2 dans mes projets Android / XMPP. Mais cela ressemble à une alternative valable à aSmack .


1
pouvez-vous s'il vous plaît décrire une façon de commencer avec, smack library .... c'est totalement nouveau pour moi. s'il vous plaît, créez un blog ou un libaray_project que les gars avec un esprit normal peuvent comprendre correctement cette bibliothèque.
Tushar Pandey

J'ai trouvé un tutoriel sur developer.samsung.com/android/technical-docs/... qui est particulièrement bon, notez qu'il faut quelques petites modifications pour des raisons de compatibilité: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

Utilisez qsmack pour Android

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

C'est la dernière version pour Android

J'ai travaillé sur une discussion individuelle, une discussion de groupe, un transfert vidéo, un transfert audio, une dernière vue, un changement de numéro d'enregistrement ... J'ai créé de nombreux plugins sur openfire


@jaspreet ..... lequel utiliser aSmack / qSmack.
Tushar Pandey

@jaspreet ... toute bibliothèque roject pour intégrer qsamck dans Android
Tushar Pandey

Tout est chinois et aucune aide n'est disponible.
AZ_


faites le moi savoir si vous rencontrez un problème
Jaspreet Chhabra

3

Je voudrais utiliser libstrophe et jni. Les objectifs d'utilisation sont multiplateformes, simples à utiliser et performants. libstrophe est écrit en c donc, il est facile d'écrire un makefile android puisque la dépendance est seulement openssl et expat lib. Dans mon cas, j'utilise openssl et expat lib de libjingle qui sont déjà portés sur android et ios. (Il suffit de porter le fichier gyp vers le makefile android ou le projet IOS).

Ci-dessous mon 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

Utilisation du fichier Lisez-moi et du guide de mise à niveau de Smack 4.1

En utilisant Android studio 2.3, j'ai récemment implémenté une démo d'une manière très simple.

-> Ajoutez simplement une dépendance de gradle dans le gradle de niveau de l'application comme ci-dessous

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

// Optional for XMPPTCPConnection

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

-> Configurer la configuration de la connexion
REMARQUE : appelez ceci dans AsyncTask ou dans un autre thread d'arrière-plan

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

-> Utiliser isConnected()et isAuthenticated()

-> Utiliser ChatManagerpour ajouter chatListener.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.