AndroidおよびXMPP:現在利用可能なソリューション[終了]


165

最近のAndroid開発に最適なXMPPライブラリはどれですか。

  • ここでSOの他の多くの質問で提案されているように、パッチを適用したSmackライブラリを使用しています。ただし、これは2年前のSmack APIのパッチバージョンです。そして、それは一般的にうまくいきますが、私は他のより最近のオプションを探っています。

  • 私は公式のSmack APIを見ていましたが、少し調査したところ、最近は問題なく動作するようです(実際のアプリケーションではまだ試していません)。

  • 私が出くわした別のソリューション、BeemのaSMACKライ​​ブラリもあります。BeemはAndroid向けのかなり新しいXMPPクライアントであり、私が理解しているところによると、パッチを適用した独自のaSMACKを使用しています。

  • 最後に、aSMACKがありますが、それもかなり長い間更新されていません(サイトが示唆するとおり)。

他に提案はありますか、それとも私が上記のいずれかを選択する必要があるのか​​を説明できますか?


2
結局何に行きましたか?公式のスマックを使用するかどうかを決定しようとしていますか?
トム・

2
ただのping /メモですが、これを再度開いて、これを閉じる原因となった重複を優先しています。
Tim Post

80
この質問を閉じるのは大きな間違いだと思います。Androidの私にXMPPに関与していることがあるだけで伝えることができ、信頼性日付まで、それは質問に来るとき「私はAndroid上でXMPPを使用するにはどうすればよい?」リソース ネット全体で。それを閉じることで、SOから高品質の値を取得します。質問は問題なく1年間以上開かれており、この質問を指す重複として閉じた場所で同じ質問をしました。私はそれを「建設的ではない」と締めくくるポイントも見ていません。それは現実世界の問題に基づいており、事実と参照が含まれています。upvoteおよびfav countも参照してください。
フロー

4
@casperOne患者の説明ありがとうございます。これは、stackoverflowの問題がどこにあるのかを理解するのに役立ちます。多分私はこれをメタで取り上げますが、これは大多数の意見であり、すでに何度も議論されたようです。それは何年も投票によって閉鎖されなかったので、それはちょうど正しいと感じていません。
フロー

4
「AndroidでXMPPを使用する方法」の必要性は別として、「Flow」と「casperOne」の間の議論はより興味深いものです。私はインターネットでxmppをさまようし、一日の終わりに私はこの投稿にここにいます。2年間のOPの後でもXMPPに使用できるライブラリーに関するより具体的な情報を提供しています。初心者向けのチャットアプリです。「EVENTS」は「FLOW'S」の視点がこの質問の終結に対して正しいという「RULES」よりも多くを語っています。
Pankaj 2013年

回答:


106

スマック

SmackはオープンソースのXMPPクライアントライブラリです。バージョン4.1以降、Androidでネイティブに実行されます。詳細については、「Smack 4.3 Readme」を参照し、Ignite RealtimeのSmackプロジェクトページを参照してください


8
Smack 3.2.0をasmackにマージしました。githubでブランチをチェックしてください:)
Flow

編集済みコメント>こんにちは>私はxmppクライアントの開発にasmackを使用しています、問題が発生しています>初回ログインから来たとき、ユーザーBとチャットを開始し、ユーザーBからメッセージを受信して​​も問題ありません。私のwifiをもう一度オンにして、プログラムでjabberサーバーを再接続し、アカウントに再度ログインします。再接続後、ユーザーBにメッセージを送信しますが、ユーザーBが私にメッセージを送信すると、メッセージが受信されません。私は受信しません。何を知っていることはit.plzガイドと一緒に間違っている
アフタブ

こんにちはFlow>既存のasmackを最新のsmackとどのようにマージできますか?またはそれは私が最新のスマックでasmackをダウンロードできるavaillabelです。
aftab

@aftab私の回答で述べたように、asmackと使用済みのsmack ブランチはgithubにあります。githubにあるREADMEを必ずお読みください。
フロー


6

最近、別のオープンソースソリューションであるjaxmpp2に遭遇しました。

jaxmpp2はAndroid(およびJava SE)もターゲットにしています。Android / XMPPプロジェクトではjaxmpp2を使用していないので、私はそれについて他に何も言うことはできません。しかし、それはaSmackの有効な代替手段のように見えます。


1
はじめに、スマックライブラリ....これは私にとってまったく新しい方法を教えてください。ブログや、普通の人がこのライブラリを正しく理解できるlibaray_projectを作成してください。
Tushar Pandey 2014

私はdeveloper.samsung.com/android/technical-docs/でチュートリアルを見つけました。これは特に優れています。互換性の理由により、いくつかの小さな変更が必要です。stackoverflow.com
realjin

3

Androidでqsmackを使用する

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

Android向けの最新ビルド

私は1対1のチャット、グループチャット、ビデオ転送、オーディオ転送、最後に見た、登録番号の変更などに取り組んできました。Openfireで多数のプラグインを作成しました


@jaspreet ..... aSmack / qSmackのどれを使用するか。
Tushar Pandey 2014

@jaspreet ... Androidにqsamckを統合するためのライブラリライブラリ
Tushar Pandey 14年

それはすべて中国語であり、利用可能なヘルプはありません。
AZ_ 2014


問題が発生した場合はお知らせください
Jaspreet Chhabra '16

3

libstropheとjniを使用したいと思います。これを使用する目標はクロスプラットフォームであり、使いやすく、パフォーマンスです。libstropheはcで記述されているため、依存関係はopensslとexpat libのみなので、android makefileを簡単に記述できます。私の場合は、opensslとlibjingleのexpat libを使用していますが、これはすでに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)



1

あなたは使用することができますTigase JaXMPPクライアントライブラリを、それは非常に汎用性だとあなたは、あなたのAndroid開発だけでなく、両方のJava SEアプリケーションのためにそれを使用することができます- 。これは活発に開発されており、Tigase Messenger for AndroidPlay Store)がベースになっています。

いくつかの例を含む基本的なライブラリドキュメント wikiページがあり、詳細についてはjavadocsを参照してください。


0

使用スマック4.1のReadmeおよびアップグレードガイドを

Androidスタジオ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ます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.