Android i XMPP: obecnie dostępne rozwiązania [zamknięte]

165

Która biblioteka XMPP byłaby obecnie najlepszym wyborem do tworzenia aplikacji na Androida?

  • Używam z poprawioną bibliotekę Smack jak sugeruje się w wielu innych kwestiach, o tutaj. Jest to jednak poprawiona wersja Smack API sprzed dwóch lat. I chociaż generalnie działa dobrze, badam inne, nowsze opcje.

  • Patrzyłem na oficjalne Smack API i po krótkich badaniach wydaje się, że obecnie może działać dobrze (chociaż nie próbowałem go jeszcze w prawdziwej aplikacji).

  • Jest też inne rozwiązanie, z którym się spotkałem, biblioteka aSMACK firmy Beem . Beem to całkiem nowy klient XMPP dla Androida iz tego, co rozumiem, używa własnej poprawionej wersji aSMACK.

  • Wreszcie jest SMACK, ale to też nie było aktualizowane od dłuższego czasu (jak sugeruje strona).

Czy masz inne sugestie lub możesz wyjaśnić, dlaczego powinienem wybrać jedną z powyższych zamiast pozostałych?

alkar
źródło
2
Z czym w końcu poszedłeś? Próbuję zdecydować, czy użyć oficjalnego klapsa, czy nie?
Tom
2
Tylko ping / uwaga, ponownie otworzyłem to na korzyść duplikatu, który spowodował zamknięcie tego.
Tim Post
80
Myślę, że zamknięcie tego pytania to duży błąd . Biorąc udział w XMPP na Androidzie, mogę powiedzieć, że jest to jedyny wiarygodny i aktualny zasób, jeśli chodzi o pytanie „Jak mogę używać XMPP na Androidzie?” w całej sieci. Zamykając go, uzyskujesz wysoką jakość z SO. Pytanie było otwarte przez ponad rok bez problemów, a pytania, które zadawały, były zamknięte, jak duplikaty wskazujące na to pytanie. Nie widzę nawet sensu zamykania go jako „niekonstruktywnego”: opiera się na prawdziwym problemie świata, zawiera fakty i odniesienia. Zobacz także upvote i fav count.
Flow
4
@casperOne Dzięki za wyjaśnienia pacjenta. Pomaga mi to zrozumieć, na czym polega problem z przepełnieniem stosu. Może podniosę to na meta, ale wydaje się, że to opinia większości i była już wielokrotnie omawiana. Po prostu nie wydaje się to właściwe, zwłaszcza, że ​​od lat nie zostało zamknięte głosami.
Flow
4
Oprócz mojej potrzeby "Jak używać XMPP w Androidzie", dyskusja pomiędzy "Flow" i "casperOne" jest bardziej interesująca. Wędrowałem po internecie dla xmpp i pod koniec dnia jestem tutaj w tym poście, który dostarcza mi bardziej szczegółowych informacji o bibliotekach, z których mogę korzystać w XMPP nawet po DWÓCH LATACH OP, jest dla mnie zdecydowanie konstruktywny i będzie setki nowicjuszy w aplikacjach do czatu. „WYDARZENIA” mówią więcej niż „ZASADY”, że punkt widzenia „FLOW” jest poprawny w związku z zamknięciem tego pytania.
Pankaj

Odpowiedzi:

106

Uderzyć

Smack to biblioteka klienta XMPP typu open source. Od wersji 4.1 działa natywnie na Androida. Aby uzyskać więcej informacji, zajrzyj do „Smack 4.3 Readme” i odwiedź stronę projektu Smack w Ignite Realtime .

Pływ
źródło
8
Połączono Smack 3.2.0 w asmack. Sprawdź gałęzie na githubie :)
Flow
Edytowane komentarze> cześć wszystko> Używam asmacka do rozwijania mojego klienta xmpp, mam problem> Kiedy przychodzę po pierwszym logowaniu, zaczynam rozmowę z użytkownikiem B i otrzymuję wiadomości od użytkownika B, również to jest w porządku. Wyłączam moje wifi i włącz je ponownie, a następnie programowo ponownie podłącz mój serwer Jabber i ponownie zaloguj się na moje konto, po ponownym połączeniu wysyłam wiadomości do użytkownika B, to jest w porządku, ale gdy użytkownik B wysyła mi wiadomości, których wiadomości po mojej stronie nie otrzymują. wiecie, co jest nie tak z przewodnikiem it.plz
aftab.
hi Flow> jak możemy połączyć istniejący asmack z najnowszym smackiem? czy jest dostępny, skąd mogę pobrać asmacka z najnowszym smackiem?
aftab
@aftab Jak napisałem w mojej odpowiedzi, asmack i używaną gałąź smack można znaleźć na github. Koniecznie przeczytaj README na githubie.
Flow
6

Niedawno natknąłem się na inne rozwiązanie open source: jaxmpp2

jaxmpp2 jest również przeznaczony dla systemu Android (i Java SE). Nie mogę powiedzieć nic więcej na ten temat, ponieważ nie używam jaxmpp2 w moich projektach Android / XMPP. Ale wygląda na to, że jest to dobra alternatywa dla aSmack .

Pływ
źródło
1
czy możesz opisać jakikolwiek sposób na początek, smack bibliotekę… to jest dla mnie zupełnie nowe. proszę załóż blog lub jakiś libaray_project, aby ludzie o normalnym umyśle mogli poprawnie zrozumieć tę bibliotekę.
Tushar Pandey
Znalazłem samouczek na developer.samsung.com/android/technical-docs/ ... co jest szczególnie dobre, zwróć uwagę, że ze względu na kompatybilność wymaga niewielkich modyfikacji: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin
3

Użyj Qsmack na Androida

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

To najnowsza wersja na Androida

Pracowałem nad rozmową indywidualną, czatem grupowym, przesyłaniem wideo, przesyłaniem dźwięku, ostatnio widziałem, zmianą numeru rejestracyjnego ... prawie ukończona aplikacja whats. Stworzyłem wiele wtyczek na Openfire

Jaspreet Chhabra
źródło
@jaspreet ..... którego użyć aSmack / qSmack.
Tushar Pandey
@jaspreet ... dowolny program biblioteczny do integracji qsamck z Androidem
Tushar Pandey
Wszystko jest po chińsku i nie ma dostępnej pomocy.
AZ_
daj mi znać, jeśli napotkasz jakiś problem
Jaspreet Chhabra
3

Chciałbym używać libstrophe i jni. Cele korzystania z tego są wieloplatformowe, proste w użyciu i wydajne. libstrophe jest napisane w c, więc łatwo jest napisać plik makefile dla Androida, ponieważ zależność dotyczy tylko openssl i expat lib. W moim przypadku używam openssl i expat lib z libjingle, które już przenoszą się na Androida i iOS. (Wystarczy przenieść plik gyp do pliku makefile Androida lub projektu IOS).

Poniżej znajduje się mój plik makefile Androida



    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
źródło
0

Za pomocą Smack 4.1 Readme i przewodnik aktualizacji

Korzystając z Android Studio 2.3, ostatnio w bardzo prosty sposób zaimplementowałem demo.

-> Po prostu dodaj zależność gradle w gradle poziomu aplikacji, jak poniżej

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

// Optional for XMPPTCPConnection

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

-> Konfiguruj konfigurację połączenia
UWAGA : Wywołaj to w AsyncTask lub w innym wątku w tle

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

-> Użyj isConnected()i isAuthenticated()

-> Użyj ChatManagerdla dodatku chatListener.

Tarun Dholakiya
źródło