Android та XMPP: Наразі доступні рішення [закрито]


165

Яка бібліотека XMPP була б найкращим вибором на сьогодні для розробки Android?

  • Я використовував виправлену бібліотеку Smack, як це пропонується в багатьох інших питаннях тут, в ТА. Однак це виправлена ​​версія API Smack від двох років тому. І хоча це, як правило, добре працює, я вивчаю будь-які інші, більш новітні варіанти.

  • Я дивився на офіційний API Smack, і після невеликих досліджень, здається, це може спрацювати зараз добре (хоча я ще не пробував цього в реальній програмі).

  • Також я знайшов ще одне рішення - бібліотека aSMACK Beem . Beem - це досить новий клієнт XMPP для android, і, як я розумію, вони використовують власну виправлену версію aSMACK.

  • Нарешті, є aSMACK, але він теж не оновлювався досить довго (як пропонує сайт).

Чи є у вас інші пропозиції чи ви можете пояснити, чому я повинен обрати одне із перерахованих вище?


2
З чим ти пішов врешті? Я намагаюся вирішити, використовувати чи офіційний присмак чи ні?
Том

2
Лише пінг / примітка, я знову відкрив це на користь дубліката, через який це було закрито.
Тім Пост

80
Я думаю, що закриття цього питання є великою помилкою . Займаючись XMPP на Android, я можу сказати, що це єдиний надійний та сучасний ресурс, коли мова йде про питання "Як я можу використовувати XMPP на Android?" на всю мережу. Закриваючи його, ви приймаєте високоякісне значення від SO. Питання було відкрито більше року без проблем і питань, які задавали те саме там, де закрито, як і дублікати, що вказують на це питання. Я навіть не бачу сенсу закривати це як "неконструктивне": воно засноване на реальній світовій проблемі, включає факти та посилання. Дивіться також підсумки та кількість фактів.
Протікайте

4
@casperOne Дякую за пояснення пацієнта. Це допомагає мені зрозуміти, де проблема зі stackoverflow. Можливо, я докладу це до мета, але, здається, це думка більшості і вже обговорювалося багато разів. Це просто не вірно, тим більше, що він не закривався голосами протягом багатьох років.
Потік

4
Крім моєї потреби в "Як використовувати XMPP в android", дискусія між "Flow" і "casperOne" є цікавішою. Я блукав по Інтернету за xmpp, і наприкінці дня я тут на цій посаді, яка надає мені більш конкретну інформацію про бібліотеки, які я можу використовувати для XMPP навіть після ДВОХ РОКІВ ОП, безумовно, для мене конструктивна і буде сотнями новачка для додатків для чату. "ПОДІЇ" говорить більше, ніж "ПРАВИЛА", що точка зору "ПОТОК" правильна щодо закриття цих питань.
Панкай

Відповіді:


106

Присмак

Smack - це бібліотека клієнтів XMPP з відкритим кодом. З версії 4.1 він працює на Android. Для отримання додаткової інформації перегляньте "Smack 4.3 Readme" та перегляньте сторінку проекту Smack в Ignite Realtime .


8
Об'єднав Smack 3.2.0 в asmack. Огляньте гілки на github :)
Протікайте

Відредаговані коментарі> привіт всім> Я використовую asmack для розробки свого клієнта xmpp, я стикаюся з проблемою> Коли я приходжу з першого разу входу, я починаю спілкуватися з користувачем B і отримую повідомлення від користувача B також, що це нормально. Я вимикаюсь мій wifi та ввімкніть його знову, а потім програматично підключіть мій сервер jabber і знову ввійдіть у свій акаунт, після повторного підключення я надсилаю повідомлення користувачу B, що нормально, але коли користувач B надсилає мені повідомлення, що повідомлення з моєї сторони не отримує. Я не знайте, що не так з довідником it.plz
aftab

привіт Flow> як ми можемо об'єднати існуючий смайлик із останнім присмаком? або це availabel, звідки я можу завантажити asmack з останнім присмаком?
aftab

@aftab Як зазначено у моїй відповіді, asmack та використану гілку smack можна знайти на github. Обов’язково прочитайте README на github.
Потік


6

Нещодавно я натрапив на інше рішення з відкритим кодом: jaxmpp2

jaxmpp2 також націлений на Android (і Java SE). Я нічого не можу сказати про це, оскільки я не використовую jaxmpp2 у своїх проектах Android / XMPP. Але це виглядає як вагома альтернатива aSmack .


1
Чи можете ви описати будь-який спосіб для початку, бібліотека smack .... це абсолютно нове для мене. будь-ласка, створіть щоденник чи інший libaray_project, щоб хлопці з нормальним розумом могли правильно зрозуміти цю бібліотеку.
Тушар Пандій

Я знайшов підручник щодо developer.samsung.com/android/technical-docs/…, що особливо добре, зауважте, що там потрібні невеликі зміни через причини сумісності: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

Використовуйте qsmack для Android

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

Його остання версія для Android

Я працював над одним чатом, груповим чатом, передачею відео, передачею аудіо, останній раз бачив, змінив реєстраційний номер ... майже повний додаток. Я створив багато плагінів на openfire


@jaspreet ..... який використовувати aSmack / qSmack.
Тушар Пандій

@jaspreet ... будь-яка програма бібліотеки для інтеграції qsamck в android
Tushar Pandey

Це все китайське і допомоги немає.
AZ_


дайте мені знати Якщо у вас виникли якісь проблеми
Jaspreet Chhabra

3

Мені б хотілося скористатися libstrophe та jni. Цілі для цього - крос-платформа, проста у використанні та продуктивності. libstrophe написано c, так що легко написати android makefile, оскільки залежність є лише openssl та expat lib. У моєму випадку я використовую openssl та expat lib з libjingle, які вже портують на android та ios. (Просто потрібно перенести gyp-файл на андроїд makefile або проект IOS).

Нижче мій андроїд 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)



1

Ви можете використовувати Tigase JaXMPP Client Library - це дуже універсально, і ви можете використовувати його як для додатків JavaSE, так і для розробки Android. Активно розробляється і Tigase Messenger для Android ( Play Store на його основі базується ).

Існує сторінка вікі документації з базової бібліотеки з кількома прикладами, і для детальної інформації вам слід ознайомитися з javadocs


0

Використання посібника з читання та оновлення Smack 4.1

Використовуючи Android studio 2.3, нещодавно я реалізував демонстрацію дуже простим способом.

-> Просто додайте залежність градуля в ступінь рівня додатка, як показано нижче

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

// Optional for XMPPTCPConnection

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

-> Налаштування конфігурації з'єднання
ПРИМІТКА . Викличте це в AsyncTask або в іншій фоновій нитці

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

-> Використовуйте isConnected()і isAuthenticated()

-> Використовувати ChatManagerдля доп chatListener.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.