web-dev-qa-db-fra.com

Android et XMPP: solutions actuellement disponibles

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

  • J'utilise la BIBLIOTHÈQUE SMACK CORRIGÉE telle qu'elle est suggérée dans de nombreuses autres questionsici à 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

  • Je me suis penché sur la API OFFICIELLE SMACK API et après une petite recherche , Il semble que cela pourrait fonctionner simplement Bien de nos jours (bien que ce ne soit pas le cas .__ essayé encore dans une application réelle).

  • Il y a aussi une autre solution par laquelle je suis venu , LA BIBLIOTHÈQUE ASMACK DE BEEM . Beem est un client XMPP assez récent pourAndroid et d'après ce que je comprends. en utilisant 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 site le suggère).

Avez-vous d'autres suggestions ou pouvez-vous expliquer pourquoi je devrais choisir l'une des solutions ci-dessus?

164
alkar

Smack

Smack est une bibliothèque de client XMPP à source ouverte. Depuis la version 4.1, il tourne nativement sur Android. Pour plus d'informations, consultez le "Smack 4.1 Readme" et la page du projet Smack sur Ignite Realtime . aSmack est obsolète et obsolète en faveur de Smack 4.1.

103
Flow

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

jaxmpp2 cible également Android (et Java SE). Je ne peux pas vraiment en dire plus, car je n'utilise pas jaxmpp2 dans mes projets Android/XMPP. Mais cela semble être une alternative valable à aSmack .

5
Flow

Je voudrais utiliser libstrophe et jni. Les objectifs à utiliser sont multiplateformes, simples à utiliser et performants . Libstrophe est écrit en c, il est donc facile d’écrire le fichier makefile sous Android puisque la dépendance n’est que openssl et expat lib. Dans mon cas, j'utilise openssl et expat lib de libjingle, qui sont déjà compatibles avec Android et iOS. (Il suffit de porter le fichier gyp dans un fichier Makefile ou un projet IOS Android).

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)

3
nguyentran

Utiliser 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 en tête à tête, une discussion en groupe, un transfert vidéo, un transfert audio, la dernière visite, un numéro d'enregistrement modifié ... ce qui est presque complet. J'ai créé beaucoup de plugins sur openfire 

3
Jaspreet Chhabra

Vous pouvez utiliser Bibliothèque client Tigase JaXMPP - il est très polyvalent et peut être utilisé à la fois pour les applications JavaSE et pour votre développement Android. Il est activement développé et Tigase Messenger pour Android ( Play Store ) est basé sur celui-ci.

Il existe une Documentation de base sur la bibliothèque wiki page avec quelques exemples et pour plus de détails, vous devriez vous référer à javadocs

1
Wojtek

Utilisation de Guide de lecture et de mise à jour de Smack 4.1

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

-> Il suffit d'ajouter une dépendance de niveau dans le niveau d'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
NOTE: Appelle cela en AsyncTask ou dans un autre thread

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

-> Utilisez ChatManager pour ajouter chatListener.

0
Tarun Dholakiya

Vous pouvez utiliser QuickBlox1 gratuitement.

Il fournit au serveur XMPP prêt à l'emploi de nombreuses fonctionnalités. Vous pouvez en savoir plus sur les fonctionnalités ici http://quickblox.com/developers/Chat

Voici un exemple d'utilisation de QuickBlox avec une bibliothèque Samm http://quickblox.com/developers/Android_XMPP_Chat_Sample

0
Faisal Shaikh