Android dan XMPP: Solusi saat ini tersedia [ditutup]

165

Pustaka XMPP mana yang akan menjadi pilihan terbaik saat ini untuk pengembangan Android?

  • Saya telah menggunakan pustaka Smack yang ditambal seperti yang disarankan dalam banyak pertanyaan lain di SO. Namun, itu versi patch dari Smack API dari dua tahun lalu. Dan meskipun secara umum bekerja dengan baik, saya sedang mengeksplorasi opsi lain yang lebih baru.

  • Saya telah mencari di Smack API resmi dan setelah sedikit riset, sepertinya itu mungkin berfungsi dengan baik saat ini (walaupun saya belum mencobanya dalam aplikasi nyata).

  • Ada juga solusi lain yang saya temui, perpustakaan aMACK Beem . Beem adalah klien XMPP yang cukup baru untuk android dan dari apa yang saya pahami mereka menggunakan versi patch mereka sendiri dari aSMACK.

  • Akhirnya, ada aSMACK tapi itu juga belum diperbarui untuk beberapa waktu (seperti yang disarankan situs).

Apakah Anda memiliki saran lain atau dapatkah Anda menjelaskan mengapa saya harus memilih salah satu di atas?

alkar
sumber
2
Apa yang Anda lakukan pada akhirnya? Saya mencoba memutuskan apakah akan menggunakan pukulan resmi atau tidak?
Tom
2
Hanya ping / catatan, saya membuka kembali ini untuk duplikat yang menyebabkan ini ditutup.
Tim Post
80
Saya pikir menutup pertanyaan ini adalah kesalahan besar . Terlibat dalam XMPP di Android, saya dapat mengatakan bahwa ini adalah satu-satunya sumber daya yang andal dan terkini ketika datang ke pertanyaan "Bagaimana saya bisa menggunakan XMPP di Android?" di seluruh jaring. Dengan menutupnya, Anda mengambil nilai kualitas tinggi dari SO. Pertanyaan terbuka selama lebih dari setahun tanpa masalah dan pertanyaan yang menanyakan tempat yang sama dengan duplikat yang menunjuk ke pertanyaan ini. Saya bahkan tidak melihat gunanya menutupnya sebagai "tidak konstruktif": Ini didasarkan pada masalah dunia nyata, melibatkan fakta dan referensi. Lihat juga jumlah upvote dan fav.
Aliran
4
@casperOne Terima kasih atas penjelasan pasien Anda. Ini membantu saya memahami di mana masalah dengan stackoverflow. Mungkin saya akan mengemukakan ini pada meta, tetapi tampaknya ini adalah pendapat mayoritas dan sudah dibahas berkali-kali. Rasanya tidak benar, terutama karena tidak ditutup oleh suara selama bertahun-tahun.
Aliran
4
Terlepas dari kebutuhan saya untuk "Cara menggunakan XMPP di android" diskusi antara "Flow" dan "casperOne" lebih menarik. Saya berkeliaran di internet untuk xmpp dan pada akhirnya saya di sini pada posting ini yang memberikan saya informasi lebih spesifik tentang perpustakaan yang dapat saya gunakan untuk XMPP bahkan setelah DUA TAHUN OP, pasti konstruktif bagi saya dan akan ratusan pemula untuk aplikasi obrolan. "ACARA" berbicara lebih dari "ATURAN" yang sudut pandang "FLOW'S" benar atas penutupan pertanyaan ini.
Pankaj

Jawaban:

106

Memukul

Smack adalah pustaka klien XMPP open-source. Sejak versi 4.1 berjalan secara native di Android. Untuk informasi lebih lanjut, lihat "Smack 4.3 Readme" dan lihat halaman proyek Smack di Ignite Realtime .

Mengalir
sumber
8
Digabungkan Smack 3.2.0 menjadi asmack. Lihatlah cabang-cabang di github :)
Flow
Komentar yang diedit> hi semua> Saya menggunakan asmack untuk mengembangkan klien xmpp saya, saya menghadapi masalah> Ketika saya datang dari login pertama kali, saya mulai mengobrol dengan pengguna B dan menerima pesan dari pengguna B juga baik-baik saja. wifi saya dan nyalakan lagi kemudian secara sistematis menghubungkan kembali server jabber saya dan lagi login akun saya, setelah menghubungkan kembali saya mengirim pesan ke pengguna B yang baik-baik saja tetapi ketika pengguna B mengirim saya pesan bahwa pesan di sisi saya tidak menerima. Saya tidak tahu apa yang salah dengan itu
aftab
hai Flow> bagaimana kita bisa menggabungkan asmack yang ada dengan smack terbaru? atau apakah tersedia dari mana saya dapat mengunduh asmack dengan smack terbaru?
aftab
@aftab Seperti yang dinyatakan dalam jawaban saya, asmack dan cabang smack yang digunakan dapat ditemukan di github. Pastikan untuk membaca README di github.
Aliran
6

Saya baru-baru ini menemukan solusi open-source lain: jaxmpp2

jaxmpp2 juga menargetkan Android (dan Java SE). Saya tidak bisa mengatakan hal lain tentang itu, karena saya tidak menggunakan jaxmpp2 di proyek Android / XMPP saya. Tapi sepertinya alternatif yang valid untuk aSmack .

Mengalir
sumber
1
bisa tolong jelaskan cara untuk memulainya, smack library .... ini benar-benar baru bagi saya. tolong buat blog atau proyek libaray_project yang orang-orang dengan pikiran normal dapat memahami perpustakaan ini dengan benar.
Tushar Pandey
Saya menemukan tutorial tentang developer.samsung.com/android/technical-docs/… yang sangat bagus, perhatikan bahwa ada beberapa modifikasi kecil karena alasan kompatibilitas: stackoverflow.com/questions/23506658/begginer-asmack-error
realjin
3

Gunakan qsmack untuk android

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

Ini build terbaru untuk Android

Saya telah bekerja pada satu-satu obrolan, obrolan grup, transfer video, transfer audio, terakhir terlihat, mengubah nomor registrasi ... hampir menyelesaikan aplikasi whats. Saya telah membuat banyak plugin di openfire

Jaspreet Chhabra
sumber
@jaspreet ..... yang mana yang menggunakan aSmack / qSmack.
Tushar Pandey
@jaspreet ... perpustakaan apa pun untuk mengintegrasikan qsamck di android
Tushar Pandey
Semuanya dalam bahasa Cina dan tidak ada bantuan yang tersedia.
AZ_
beri tahu saya Jika Anda menghadapi masalah apa pun di dalamnya
Jaspreet Chhabra
3

Saya ingin menggunakan libstrophe dan jni. Sasaran untuk menggunakan ini adalah lintas platform, mudah digunakan dan kinerja. libstrophe ditulis dalam c jadi, mudah untuk menulis makefile android karena ketergantungannya hanya openssl dan expat lib. Dalam kasus saya, saya menggunakan openssl dan expat lib dari libjingle yang sudah port ke android dan ios. (Hanya perlu mem-port file gyp ke android makefile atau proyek IOS).

Di bawah ini adalah makefile android saya



    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
sumber
0

Menggunakan Smack 4.1 Readme dan Panduan Upgrade

Menggunakan Android studio 2.3, Baru-baru ini saya telah mengimplementasikan demo dengan cara yang sangat sederhana.

-> Hanya Tambahkan dependensi gradle di tingkat tingkat aplikasi seperti di bawah ini

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

// Optional for XMPPTCPConnection

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

-> Konfigurasi Konfigurasi Konfigurasi
CATATAN : Panggil ini di AsyncTask atau di utas latar belakang lainnya

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

-> Gunakan isConnected()dan isAuthenticated()

-> Gunakan ChatManageruntuk menambahkan chatListener.

Tarun Dholakiya
sumber