Android und XMPP: Derzeit verfügbare Lösungen [geschlossen]

165

Welche XMPP-Bibliothek ist heutzutage die beste Wahl für die Android-Entwicklung?

  • Ich habe die gepatchte Smack-Bibliothek verwendet, wie in vielen anderen Fragen hier in SO vorgeschlagen. Dies ist jedoch eine gepatchte Version der Smack-API von vor zwei Jahren. Und obwohl es im Allgemeinen gut funktioniert, erkunde ich andere, neuere Optionen.

  • Ich habe mir die offizielle Smack-API angesehen und nach ein wenig Recherche scheint es heutzutage gut zu funktionieren (obwohl ich sie noch nicht in einer echten Anwendung ausprobiert habe).

  • Es gibt auch eine andere Lösung, auf die ich gestoßen bin : Beems aSMACK-Bibliothek . Beem ist ein ziemlich neuer XMPP-Client für Android und meines Wissens verwenden sie ihre eigene gepatchte Version von aSMACK.

  • Schließlich gibt es aSMACK, aber auch das wurde seit einiger Zeit nicht mehr aktualisiert (wie auf der Website vorgeschlagen).

Haben Sie weitere Vorschläge oder können Sie erklären, warum ich einen der oben genannten Vorschläge vorziehen sollte?

alkar
quelle
2
Was hast du am Ende gemacht? Ich versuche zu entscheiden, ob ich einen offiziellen Schlag verwenden soll oder nicht.
Tom
2
Nur ein Ping / eine Notiz, ich habe dies zugunsten des Duplikats wieder geöffnet, das dazu geführt hat, dass dies geschlossen wurde.
Tim Post
80
Ich denke, dass das Schließen dieser Frage ein großer Fehler ist . Wenn ich an XMPP unter Android beteiligt bin, kann ich feststellen, dass dies die einzige zuverlässige und aktuelle Ressource ist, wenn es um die Frage "Wie kann ich XMPP unter Android verwenden?" Geht. im ganzen Netz. Wenn Sie es schließen, erhalten Sie einen hohen Qualitätswert von SO. Die Frage war über ein Jahr lang ohne Probleme offen und Fragen, die gleich gestellt wurden, wurden als Duplikate geschlossen, die auf diese Frage verweisen. Ich sehe den Punkt, es zu schließen, nicht einmal als "nicht konstruktiv" an: Es basiert auf einem Problem der realen Welt, beinhaltet Fakten und Referenzen. Siehe auch Upvote und Fav Count.
Flow
4
@casperOne Vielen Dank für Ihre Patientenerklärungen. Es hilft mir zu verstehen, wo das Problem mit dem Stapelüberlauf liegt. Vielleicht werde ich dies auf Meta ansprechen, aber es scheint, dass dies die Meinung der Mehrheit ist und bereits viele Male diskutiert wurde. Es fühlt sich einfach nicht richtig an, zumal es jahrelang nicht durch Abstimmungen geschlossen wurde.
Flow
4
Abgesehen von meinem Bedürfnis nach "Wie man XMPP in Android verwendet" ist die Diskussion zwischen "Flow" und "casperOne" interessanter. Ich bin für xmpp im Internet gewandert und am Ende des Tages bin ich hier in diesem Beitrag, der mir spezifischere Informationen über Bibliotheken liefert, die ich auch nach ZWEI JAHREN OP für XMPP verwenden kann. Das ist definitiv konstruktiv für mich und wird für Hunderte sein von Neuling für Chat-Apps. "EVENTS" spricht mehr als "REGELN", dass der Standpunkt von "FLOW'S" in Bezug auf den Abschluss dieser Fragen richtig ist.
Pankaj

Antworten:

106

Klatschen

Smack ist eine Open-Source-XMPP-Clientbibliothek. Seit Version 4.1 läuft es nativ auf Android. Weitere Informationen finden Sie in der "Smack 4.3 Readme" und auf der Smack-Projektseite unter Ignite Realtime .

Fließen
quelle
8
Smack 3.2.0 in asmack zusammengeführt. Schauen Sie sich die Zweige auf Github an :)
Flow
Bearbeitete Kommentare> Hallo zusammen> Ich verwende asmack für die Entwicklung meines xmpp-Clients. Ich habe ein Problem.> Wenn ich mich zum ersten Mal anmelde, beginne ich mit Benutzer B zu chatten und empfange Nachrichten von Benutzer B. Auch das ist in Ordnung. Ich schalte aus Mein WLAN und schalten Sie es wieder ein, verbinden Sie dann programmgesteuert meinen Jabber-Server erneut und melden Sie sich erneut bei meinem Konto an. Nach dem erneuten Verbinden sende ich Nachrichten an Benutzer B, was in Ordnung ist, aber wenn Benutzer B mir Nachrichten sendet, die Nachrichten auf meiner Seite nicht empfangen. Ich nicht wissen, was mit it.plz Leitfaden falsch ist
nach
hi Flow> wie können wir bestehenden asmack mit dem neuesten smack verbinden? oder ist es verfügbar wo kann ich asmack mit aktuellstem smack herunterladen?
Nach dem
@aftab Wie in meiner Antwort angegeben, sind asmack und der verwendete Smack-Zweig auf Github zu finden. Stellen Sie sicher, dass Sie die README's auf Github lesen.
Flow
6

Ich bin kürzlich auf eine andere Open-Source-Lösung gestoßen : jaxmpp2

jaxmpp2 zielt auch auf Android (und Java SE) ab. Ich kann eigentlich nichts anderes dazu sagen, da ich jaxmpp2 in meinen Android / XMPP-Projekten nicht verwende. Aber es sieht nach einer gültigen Alternative zu aSmack aus .

Fließen
quelle
1
Kannst du bitte beschreiben, wie ich anfangen soll? Klatschbibliothek ... das ist für mich völlig neu. Bitte erstelle einen Blog oder ein libaray_project, damit Leute mit normalem Verstand diese Bibliothek richtig verstehen können.
Tushar Pandey
Ich habe unter developer.samsung.com/android/technical-docs/… ein Tutorial gefunden , das besonders gut ist. Beachten Sie, dass aus Kompatibilitätsgründen einige kleine Änderungen erforderlich sind
Realjin
3

Verwenden Sie qsmack für Android

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

Es ist das neueste Build für Android

Ich habe an einem Einzel-Chat, Gruppen-Chat, Video-Transfer, Audio-Transfer, zuletzt gesehen, Registrierungsnummer ändern ... fast vollständig, was App. Ich habe viele Plugins auf Openfire erstellt

Jaspreet Chhabra
quelle
@jaspreet ..... welches aSmack / qSmack verwenden soll.
Tushar Pandey
@jaspreet ... jedes Bibliotheksprojekt für die Integration von qsamck in Android
Tushar Pandey
Es ist alles chinesisch und keine Hilfe verfügbar.
AZ_
Lassen Sie es mich wissen, wenn Sie auf ein Problem
stoßen
3

Ich möchte libstrophe und jni verwenden. Die Ziele hierfür sind plattformübergreifend, einfach zu bedienen und leistungsfähig. libstrophe ist in c geschrieben, so ist es einfach, android makefile zu schreiben, da die abhängigkeit nur openssl und expat lib ist. In meinem Fall verwende ich openssl und expat lib von libjingle, die bereits auf Android und iOS portieren. (Müssen nur Gyp-Datei auf Android Makefile oder IOS-Projekt portieren).

Unten ist mein 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)


nguyentran
quelle
0

Verwenden von Smack 4.1 Readme und Upgrade-Handbuch

Mit Android Studio 2.3 habe ich kürzlich eine Demo auf sehr einfache Weise implementiert.

-> Fügen Sie einfach Gradle-Abhängigkeit in App-Level-Gradle wie unten hinzu

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

// Optional for XMPPTCPConnection

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

-> Verbindungskonfiguration konfigurieren
HINWEIS : Rufen Sie dies in AsyncTask oder in einem anderen Hintergrundthread auf

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

-> Verwenden isConnected() und isAuthenticated()

-> ChatManagerZum Hinzufügen verwenden chatListener.

Tarun Dholakiya
quelle