Android và XMPP: Các giải pháp hiện có [đóng]


165

Thư viện XMPP nào sẽ là lựa chọn tốt nhất hiện nay để phát triển Android?

  • Tôi đã sử dụng thư viện Smack đã vá như được đề xuất trong nhiều câu hỏi khác ở đây trong SO. Tuy nhiên, đó là phiên bản vá của API Smack từ hai năm trước. Và mặc dù nó thường hoạt động tốt Tôi đang khám phá bất kỳ tùy chọn nào khác, gần đây hơn.

  • Tôi đã xem xét API Smack chính thức và sau một nghiên cứu nhỏ, có vẻ như nó có thể hoạt động tốt hiện nay (mặc dù tôi chưa thử nó trong một ứng dụng thực tế).

  • Ngoài ra còn có một giải pháp khác mà tôi đã gặp, thư viện aSMACK của Beem . Beem là một máy khách XMPP khá mới dành cho Android và theo những gì tôi hiểu thì họ đang sử dụng phiên bản vá lỗi riêng của aSMACK.

  • Cuối cùng, có aSMACK nhưng điều đó cũng chưa được cập nhật trong một thời gian dài (như trang web gợi ý).

Bạn có bất kỳ đề xuất nào khác hoặc bạn có thể giải thích lý do tại sao tôi nên chọn một trong những điều trên so với phần còn lại?


2
Bạn đã đi với cái gì cuối cùng? Tôi đang cố gắng quyết định có nên sử dụng smack chính thức hay không?
Tom

2
Chỉ cần một ping / ghi chú, tôi đã mở lại cái này để ủng hộ bản sao khiến nó bị đóng.
Tim Post

80
Tôi nghĩ rằng việc đóng câu hỏi này là một sai lầm lớn . Tham gia vào XMPP trên Android Tôi có thể nói đó là tài nguyên đáng tin cậycập nhật duy nhất khi đặt câu hỏi "Làm cách nào tôi có thể sử dụng XMPP trên Android?" trên toàn bộ mạng Bằng cách đóng nó, bạn lấy một giá trị chất lượng cao từ SO. Câu hỏi đã được mở trong hơn một năm mà không có vấn đề và câu hỏi nào được hỏi giống như nơi đóng cửa khi các bản sao chỉ ra câu hỏi này. Tôi thậm chí không thấy điểm nào trong việc đóng nó là "không mang tính xây dựng": Nó dựa trên một vấn đề trong thế giới thực, liên quan đến các sự kiện và tài liệu tham khảo. Xem thêm upvote và fav đếm.
Lưu lượng

4
@casperOne Cảm ơn bạn đã giải thích cho bệnh nhân của bạn. Nó giúp tôi hiểu vấn đề với stackoverflow là ở đâu. Có thể tôi sẽ đưa ra điều này trên meta, nhưng có vẻ như đây là ý kiến ​​của đa số và đã được thảo luận nhiều lần rồi. Nó chỉ không cảm thấy đúng, đặc biệt là vì nó đã không được đóng bởi phiếu bầu trong nhiều năm.
Lưu lượng

4
Ngoài nhu cầu của tôi về "Cách sử dụng XMPP trong Android", cuộc thảo luận giữa "Flow" và "casperOne" còn thú vị hơn. Tôi đã lang thang trên internet cho xmpp và vào cuối ngày tôi ở đây trên bài đăng này cung cấp cho tôi thông tin cụ thể hơn về các thư viện tôi có thể sử dụng cho XMPP ngay cả sau HAI NĂM của OP, chắc chắn sẽ mang tính xây dựng cho tôi và sẽ đến hàng trăm của newbie cho các ứng dụng trò chuyện. "SỰ KIỆN" nói nhiều hơn "QUY TẮC" rằng quan điểm của "HOA" là chính xác đối với việc đóng câu hỏi này.
Pankaj

Câu trả lời:


106

Đập

Smack là một thư viện máy khách XMPP mã nguồn mở. Kể từ phiên bản 4.1, nó chạy tự nhiên trên Android. Để biết thêm thông tin, hãy xem "Smack 4.3 Readme" và xem trang dự án Smack tại Ignite Realtime .


8
Sáp nhập Smack 3.2.0 vào asmack. Kiểm tra các chi nhánh trên github :)
Flow

Đã chỉnh sửa nhận xét> hi all> Tôi đang sử dụng asmack để phát triển ứng dụng khách xmpp của mình, tôi đang gặp vấn đề> Khi tôi đăng nhập lần đầu tiên, tôi bắt đầu trò chuyện với người dùng B và nhận được tin nhắn từ người dùng B cũng không sao. wifi của tôi và bật lại sau đó lập trình kết nối lại máy chủ jabber của tôi và đăng nhập lại tài khoản của tôi, sau khi kết nối lại, tôi đang gửi tin nhắn cho người dùng B, nhưng khi người dùng B gửi cho tôi tin nhắn mà tôi không nhận được tin nhắn. biết điều gì không ổn với nó. Hướng dẫn của bạn
aftab

hi Flow> làm thế nào chúng ta có thể hợp nhất asmack hiện tại với smack mới nhất? hoặc nó có sẵn từ nơi tôi có thể tải xuống asmack với cú đánh mới nhất?
aftab

@aftab Như đã nêu trong câu trả lời của tôi, asmacknhánh smack đã sử dụng có thể được tìm thấy trên github. Đảm bảo đọc README trên github.
Lưu lượng


6

Gần đây tôi tình cờ gặp một giải pháp nguồn mở khác: jaxmpp2

jaxmpp2 cũng nhắm mục tiêu Android (và Java SE). Tôi thực sự không thể nói bất cứ điều gì khác về nó, vì tôi không sử dụng jaxmpp2 trong các dự án Android / XMPP của mình. Nhưng có vẻ như một sự thay thế hợp lệ cho aSmack .


1
bạn có thể vui lòng mô tả bất kỳ cách nào để bắt đầu, thư viện smack .... đây là điều hoàn toàn mới đối với tôi. vui lòng tạo một blog hoặc một số libaray_project mà những người có đầu óc bình thường có thể hiểu thư viện này đúng cách.
Tushar Pandey

Tôi đã tìm thấy một hướng dẫn về developer.samsung.com/android/technical-docs/ , điều này đặc biệt tốt, lưu ý rằng có một số sửa đổi nhỏ vì lý do tương thích: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin

3

Sử dụng qsmack cho android

https://code.google.com.vn/p/qsmack/doads/list

Đây là bản dựng mới nhất dành cho Android

Tôi đã làm việc trên một trò chuyện, trò chuyện nhóm, chuyển video, chuyển âm thanh, nhìn thấy lần cuối, thay đổi số đăng ký ... gần như hoàn thành ứng dụng whats. Tôi đã tạo rất nhiều plugin trên openfire


@jaspreet ..... cái nào nên sử dụng aSmack / qSmack.
Tushar Pandey

@jaspreet ... bất kỳ thư viện nào để tích hợp qsamck trong Android
Tushar Pandey

Tất cả đều là tiếng Trung Quốc và không có trợ giúp.
AZ_


hãy cho tôi biết Nếu bạn gặp phải bất kỳ vấn đề nào trong đó
Jaspreet Chhabra

3

Tôi muốn sử dụng libstrophe và jni. Mục tiêu để sử dụng này là đa nền tảng, sử dụng đơn giản và hiệu suất. libstrophe được viết bằng c vì vậy, thật dễ dàng để viết android makefile vì phần phụ thuộc chỉ là openssl và expat lib. Trong trường hợp của tôi, tôi đang sử dụng openssl và expat lib từ libjingle đã chuyển sang Android và ios. (Chỉ cần chuyển tệp gyp sang Android makefile hoặc dự án IOS).

Dưới đây là tệp thực hiện Android của tôi



    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)




0

Sử dụng Smack 4.1 Readme và Hướng dẫn nâng cấp

Sử dụng Android studio 2.3, gần đây tôi đã thực hiện một bản demo theo cách rất đơn giản.

-> Chỉ cần thêm phụ thuộc lớp trong lớp cấp độ ứng dụng như dưới đây

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

// Optional for XMPPTCPConnection

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

-> Cấu hình cấu hình kết nối
GHI CHÚ : Gọi đây trong AsyncTask hoặc trong chuỗi nền khác

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

-> Sử dụng isConnected()isAuthenticated()

-> Sử dụng ChatManagerđể thêm chatListener.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.