Android и XMPP: доступные в настоящее время решения [закрыто]

165

Какая библиотека XMPP будет лучшим выбором в настоящее время для разработки под Android?

  • Я использую пропатченную библиотеку Smack, как предлагается во многих других вопросах здесь, в SO. Однако это исправленная версия Smack API, выпущенная два года назад. И хотя в целом это работает хорошо, я изучаю любые другие, более свежие варианты.

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

  • Есть еще одно решение, с которым я столкнулся - библиотека Beem aSMACK . Beem - довольно новый XMPP-клиент для Android, и, насколько я понимаю, они используют собственную исправленную версию aSMACK.

  • Наконец, есть aSMACK, но он также не обновлялся в течение достаточно долгого времени (как предлагает сайт).

Есть ли у вас какие-либо другие предложения или вы можете объяснить, почему я должен выбрать один из перечисленных выше?

Алькар
источник
2
Что вы пошли в конце концов? Я пытаюсь решить, использовать ли официальный привкус или нет?
Том
2
Просто пинг / примечание, я снова открыл это в пользу дубликата, который заставил это быть закрыто.
Тим Пост
80
Я думаю, что закрытие этого вопроса - большая ошибка . Принимая участие в XMPP на Android, я могу сказать, что это единственный надежный и актуальный ресурс, когда речь заходит о вопросе «Как я могу использовать XMPP на Android?» на всю сеть. Закрывая его, вы получаете высокое качество от SO. Вопрос был открыт более года без проблем и вопросов, которые задавались одинаково, когда закрывались как дубликаты, указывающие на этот вопрос. Я даже не вижу смысла закрывать его как «неконструктивный»: он основан на реальной проблеме, включает факты и ссылки. Смотрите также upvote и fav count.
Поток
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, и это нормально. мой Wi-Fi и включите его снова, затем программно переподключите мой jabber-сервер и снова войдите в мою учетную запись, после переподключения я отправляю сообщения пользователю B, это нормально, но когда пользователь B отправляет мне сообщения, которые сообщения на моей стороне не получают. Я не получаю знать, что не так с руководством
it.plz
привет Flow> как мы можем объединить существующий asmack с последним smack? или это доступно откуда я могу скачать asmack с последним привкусом?
2012 г.
@aftab Как уже говорилось в моем ответе, asmack и ветка smack, которую вы использовали, находятся на github Обязательно прочтите README на github.
поток
6

Недавно я наткнулся на другое решение с открытым исходным кодом: jaxmpp2

jaxmpp2 также предназначен для Android (и Java SE). Больше я ничего не могу сказать по этому поводу, потому что я не использую jaxmpp2 в своих проектах Android / XMPP. Но это похоже на действительную альтернативу aSmack .

поток
источник
1
Не могли бы вы описать любой способ начать, чмокать библиотеку ... это совершенно новое для меня. пожалуйста, создайте блог или какой-нибудь 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

Я работал над чатом один на один, групповым чатом, передачей видео, передачей аудио, последним просмотренным, изменением регистрационного номера ... почти завершил приложение Whats. Я создал много плагинов на openfire

Джасприт Чхабра
источник
@jaspreet ..... какой использовать aSmack / qSmack.
Тушар Пандей
@jaspreet ... любой проект библиотеки для интеграции qsamck в android
Тушар Пандей
Это все на китайском и никакой помощи нет.
AZ_
dropbox.com/s/dnc9nule3hjh08f/qsmack.zip?dl=0
Джасприт Чхабра
дайте мне знать, если у вас возникнут какие-либо проблемы
Jaspreet Chhabra
3

Я хотел бы использовать libstrophe и jni. Цели его использования - кроссплатформенность, простота в использовании и производительность. libstrophe написана на c, так что легко написать make-файл для Android, так как зависимостью являются только openssl и expat lib. В моем случае я использую openssl и expat lib из libjingle, которые уже портированы на android и ios. (Просто нужно перенести файл gyp в Android Makefile или проект IOS).

Ниже мой 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
источник
1

Вы можете использовать клиентскую библиотеку Tigase JaXMPP - она ​​очень универсальна, и вы можете использовать ее как для приложений JavaSE, так и для разработки под Android. Активно разрабатывается и Tigase Messenger для Android ( Play Store на его основе основан ).

Существует вики-страница с документацией по базовой библиотеке с парой примеров, и для подробностей вы должны обратиться к javadocs

Войтек
источник
0

Использование Smack 4.1 Readme и Руководство по обновлению

Используя Android studio 2.3, недавно я реализовал демо очень простым способом.

-> Просто добавьте зависимость gradle в gradle уровня приложения, как показано ниже

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.

Тарун Дхолакия
источник
0

Вы можете использовать QuickBlox1 бесплатно.

Он предоставляет XMPP-сервер из коробки с множеством функций, о которых вы можете прочитать здесь http://quickblox.com/developers/Chat

Вот пример того, как начать использовать QuickBlox с библиотекой aSmack http://quickblox.com/developers/Android_XMPP_Chat_Sample

Фейсал Шейх
источник