Android และ XMPP: โซลูชั่นที่มีอยู่ในปัจจุบัน [ปิด]


165

ห้องสมุด XMPP ไหนจะเป็นทางเลือกที่ดีที่สุดในปัจจุบันสำหรับการพัฒนา Android?

  • ฉันใช้ห้องสมุด Smack ที่ได้รับการปรับปรุงตามที่แนะนำในคำถามอื่น ๆ อีกมากมายที่นี่ใน SO อย่างไรก็ตามนั่นเป็น Smack API รุ่นที่ได้รับการติดตั้งเมื่อสองปีที่แล้ว และถึงแม้ว่าโดยทั่วไปจะใช้งานได้ดีฉันกำลังสำรวจตัวเลือกอื่น ๆ แต่ตัวเลือกที่ใหม่กว่า

  • ฉันเคยดูที่ Smack API อย่างเป็นทางการแล้วหลังจากการวิจัยเล็กน้อยดูเหมือนว่ามันจะใช้ได้ดีในทุกวันนี้

  • นอกจากนี้ยังมีวิธีแก้ไขปัญหาอื่นที่ฉันได้พบห้องสมุด aSMACK ของ Beemห้องสมุด Beem เป็นไคลเอนต์ XMPP ที่ค่อนข้างใหม่สำหรับ Android และจากสิ่งที่ฉันเข้าใจว่าพวกเขากำลังใช้ aSMACK เวอร์ชันที่แพตช์ของตัวเอง

  • ในที่สุดก็มีaSMACKแต่ก็ไม่ได้รับการปรับปรุงสักพัก (ตามที่เว็บไซต์แนะนำ)

คุณมีข้อเสนอแนะอื่น ๆ หรือคุณสามารถอธิบายได้ว่าทำไมฉันควรเลือกข้อใดข้อหนึ่งข้างต้นในส่วนที่เหลือ


2
คุณไปด้วยอะไรในที่สุด? ฉันกำลังพยายามตัดสินใจว่าจะใช้ smack อย่างเป็นทางการหรือไม่?
Tom

2
เพียงแค่ ping / note ฉันได้เปิดมันใหม่เพื่อสนับสนุนสำเนาที่ทำให้ปิด
Tim Post

80
ผมคิดว่าปิดคำถามนี้เป็นความผิดพลาดใหญ่ การมีส่วนร่วมใน XMPP บน Android ฉันสามารถบอกได้ว่าเป็นทรัพยากรที่เชื่อถือได้และทันสมัยเมื่อมันมาถึงคำถาม "ฉันจะใช้ XMPP บน Android ได้อย่างไร" บนเน็ตทั้งหมด เมื่อปิดแล้วคุณจะรับค่าคุณภาพสูงจาก SO คำถามเปิดมานานกว่าหนึ่งปีโดยไม่มีปัญหาและคำถามที่ถามเหมือนกันว่าปิดที่ไหนเหมือนรายการซ้ำที่ชี้ไปที่คำถามนี้ ฉันไม่เห็นประเด็นในการปิดเป็น "ไม่สร้างสรรค์": มันขึ้นอยู่กับปัญหาโลกแห่งความจริงเกี่ยวข้องกับข้อเท็จจริงและการอ้างอิง ดู upvote และ fav count
Flow

4
@casperOne ขอบคุณสำหรับคำอธิบายของผู้ป่วย มันช่วยให้ฉันเข้าใจว่าปัญหาของ stackoverflow คืออะไร บางทีฉันอาจจะนำเรื่องนี้ขึ้นมาในเมตาดาต้า แต่ดูเหมือนว่านี่เป็นความเห็นส่วนใหญ่และได้มีการพูดคุยกันหลายครั้งแล้ว มันรู้สึกไม่ถูกต้องโดยเฉพาะอย่างยิ่งเมื่อมันไม่ได้ถูกปิดด้วยคะแนนเสียงมานาน
Flow

4
นอกเหนือจากความต้องการของฉันสำหรับ "วิธีใช้ XMPP ใน android" การสนทนาระหว่าง "Flow" และ "casperOne" นั้นน่าสนใจยิ่งขึ้น ฉันเดินบนอินเทอร์เน็ตสำหรับ xmpp และในตอนท้ายของวันที่ฉันอยู่ที่นี่ในโพสต์นี้ซึ่งให้ข้อมูลที่เฉพาะเจาะจงมากขึ้นเกี่ยวกับห้องสมุดที่ฉันสามารถใช้สำหรับ XMPP แม้หลังจากสองปีของ OP เป็นสิ่งที่สร้างสรรค์สำหรับฉันและจะเป็นร้อย ๆ ของ newbie สำหรับแอพแชท "กิจกรรม" พูดมากกว่า "กฎ" ว่ามุมมอง "ไหลของ" ถูกต้องในการปิดคำถามนี้
Pankaj

คำตอบ:


106

ตี

Smack เป็นไลบรารีไคลเอ็นต์ XMPP แบบโอเพ่นซอร์ส ตั้งแต่รุ่น 4.1 มันทำงานบน Android สำหรับข้อมูลเพิ่มเติมดูได้ที่เป็น"Smack 4.3 Readme"และเห็นหน้าโครงการ Smack ในงาน Ignite เรียลไทม์


8
ผสาน Smack 3.2.0 เข้ากับ asmack ตรวจสอบสาขาบน GitHub :)
ไหล

ความคิดเห็นที่มีการแก้ไข> hi all> ฉันกำลังใช้ asmack ในการพัฒนาไคลเอนต์ xmpp ของฉันฉันกำลังประสบปัญหา> เมื่อฉันมาจากการเข้าสู่ระบบครั้งที่ 1 ฉันเริ่มการสนทนากับผู้ใช้ B และรับข้อความจากผู้ใช้ B ด้วยเช่นกัน wifi ของฉันและเปิดสวิตช์อีกครั้งจากนั้นเชื่อมต่อเซิร์ฟเวอร์ jabber ของฉันโดยทางโปรแกรมและเข้าสู่บัญชีของฉันอีกครั้งหลังจากเชื่อมต่ออีกครั้งฉันกำลังส่งข้อความไปยังผู้ใช้ B ที่ใช้ได้ แต่เมื่อผู้ใช้ B ส่งข้อความให้ฉันว่าข้อความด้านข้างของฉันไม่ได้รับ รู้ว่ามีอะไรผิดปกติกับมันโปรดใช้คำแนะนำ
aftab

สวัสดี Flow> เราจะรวม asmack ที่มีอยู่กับ smack ล่าสุดได้อย่างไร หรือเป็นเพราะฉันสามารถดาวน์โหลด asmack ด้วย smack ล่าสุดได้หรือไม่
aftab

@aftab ตามที่ระบุไว้ในคำตอบของฉันasmackและsmack branch ที่ใช้สามารถพบได้บน github ตรวจสอบให้แน่ใจว่าได้อ่าน README บน gitHub
Flow


6

ฉันเพิ่งเจอโซลูชันโอเพนซอร์สอื่น: jaxmpp2

jaxmpp2 ยังกำหนดเป้าหมาย Android (และ Java SE) ฉันไม่สามารถพูดอะไรเกี่ยวกับเรื่องนี้ได้อีกเพราะฉันไม่ได้ใช้ jaxmpp2 ในโครงการ Android / XMPP ของฉัน แต่มันดูเหมือนจะเป็นทางเลือกที่ถูกต้องเพื่อaSmack


1
คุณช่วยอธิบายวิธีเริ่มต้นด้วย smack library .... นี่เป็นเรื่องใหม่สำหรับฉัน โปรดสร้างบล็อกหรือ libaray_project ที่คนที่มีความคิดปกติสามารถเข้าใจห้องสมุดนี้ได้อย่างถูกต้อง
Tushar Pandey

ฉันพบบทเรียนเกี่ยวกับ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 ใด
Tushar Pandey

@jaspreet ... ไลบราห้องสมุดใด ๆ ที่รวม qsamck ในแอนดรอยด์
Tushar Pandey

เป็นภาษาจีนทั้งหมดและไม่มีความช่วยเหลือ
AZ_


แจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ ในนั้น
Jaspreet Chhabra

3

ฉันต้องการใช้ libstrophe และ jni เป้าหมายในการใช้งานนี้คือ Cross platform ใช้งานง่ายและมีประสิทธิภาพ libstrophe เขียนใน c ดังนั้นมันง่ายที่จะเขียน android makefile เนื่องจากการพึ่งพาเป็น openssl และ lib expat เท่านั้น ในกรณีของฉันฉันใช้ openssl และ lib ต่างชาติจาก libjingle ซึ่งมีพอร์ตอยู่แล้วสำหรับ Android และ iOS (เพียงแค่ต้องย้ายไฟล์ gyp ไปยัง android makefile หรือโครงการ IOS)

ด้านล่างเป็น makefile android ของฉัน



    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 - มันอเนกประสงค์มากและคุณสามารถใช้กับทั้งแอปพลิเคชัน JavaSE เช่นเดียวกับการพัฒนา Android ของคุณ มันพัฒนาอย่างแข็งขันและTigase Messenger สำหรับ Android ( Play Store ) ขึ้นอยู่กับมัน

มีหน้าวิกิเอกสารคู่มือไลบรารีพื้นฐานพร้อมด้วยตัวอย่างสองสามตัวอย่างและสำหรับรายละเอียดที่คุณควรอ้างอิงถึงjavadocs


0

การใช้Smack 4.1 Readme และคำแนะนำในการอัพเกรด

ด้วยการใช้ 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()

-> ใช้สำหรับการเพิ่มChatManagerchatListener


0

คุณสามารถใช้ QuickBlox1 ได้ฟรี

มันให้เซิร์ฟเวอร์ XMPP ออกมาพร้อมกับคุณสมบัติมากมายคุณสามารถอ่านเกี่ยวกับคุณสมบัติที่นั่นhttp://quickblox.com/developers/Chat

นี่คือตัวอย่างวิธีการเริ่มใช้ QuickBlox กับไลบรารี aSmack http://quickblox.com/developers/Android_XMPP_Chat_Sample

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.