0

最近、XMPP について読みました。XMPP の使用経験を積むために、IM メッセージを送受信できるアプリケーションを作成したいと考えています。問題は、XMPP の使用や Android での使用についてほとんど何も知らないことです。AndroidでXMPPを使用する方法について、誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.

ありがとう!

4

1 に答える 1

1

XMPP から始めるには、次のことを行う必要があります。

  1. OpenFire (チャット サーバー)をインストールします。
  2. smack.jar XMPP クライアント jar を Android アプリに追加します。
  3. そのようなPacketListenerを実装します
public class MyPacketListener implements PacketListener {

@Override     
public void processPacket(Packet packet) {        
   // Write the implementation code here.

//The packet contains the message and the metadata about the message.

}

}

4.次に、接続の失敗を適切に処理するために を実装する必要があります。

public class XMPPConnectionFailedException extends RuntimeException {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Override
public String toString() {

    return "The Chat server or the Connection to the chat server failed";
}

}

5. 次に、XMPP サーバーへの接続を実際に行うクラスが必要になります。ここに実装があります。

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.PrivateDataManager;

import com.test.chat.MyPacketListener;
import com.testchat.exception.XMPPConnectionFailedException;

public class ChatUtil {

public final static String SERVER_HOST = "serverip";
public final static int SERVER_PORT = 5222;
public final static String SERVICE_NAME = "p2547738.pubip.serverbeach.com";

private static XMPPConnection xmppConnection;

public static String CURRENT_RECIPIENT_CHAT_ID;
public static String CURRENT_RECIPIENT_NAME;

public static final String IN = "IN";
public static final String OUT = "OUT";
public static String CURRENT_RECIPIENT_FB_IMAGE;
public static boolean STARTED = false;

public static XMPPConnection getXmppConnection(String username) throws XMPPConnectionFailedException {

    try {
        if (xmppConnection == null) {
            ConnectionConfiguration config = new ConnectionConfiguration(SERVER_HOST, SERVER_PORT, SERVICE_NAME);
            xmppConnection = new XMPPConnection(config);

        }

        if (!xmppConnection.isConnected()) {
            xmppConnection.connect();
        }


        if (!xmppConnection.isAuthenticated()) {
            xmppConnection.login(username, "123");
            ProviderManager pm = ProviderManager.getInstance();
            pm.addIQProvider("query", "jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider());

            PacketFilter packetFilter = new MessageTypeFilter(Message.Type.chat);

            xmppConnection.addConnectionListener(new ConnectionListener() {

                   @Override
                   public void reconnectionSuccessful() {
                       System.out.println("reconnectionSuccessful");
                   }

                   @Override
                   public void reconnectionFailed(Exception arg0) {
                       System.out.println("reconnectionFailed");
                   }

                   @Override
                   public void reconnectingIn(int arg0) {
                       System.out.println("reconnectingIn");
                   }

                   @Override
                   public void connectionClosedOnError(Exception arg0) {
                       System.out.println("connectionClosedOnError");
                   }

                   @Override
                   public void connectionClosed() {
                       System.out.println("connectionClosed");
                   }
               });

            MyPacketListener listener = new MyPacketListener();
            xmppConnection.addPacketListener(shareFareChatListener,packetFilter);


        }
        Presence presence = new Presence(Presence.Type.available);
        xmppConnection.sendPacket(presence);

        ChatUtil.STARTED = true;

    } catch (Exception e) {
        throw new XMPPConnectionFailedException();
    }

    return xmppConnection;

}

}

6.最後に、ユーザーのサインアップに使用した資格情報を使用して、XMPP サーバーへの接続を試みます。

private void connectToChat(最終文字列のニックネーム) { System.out.println("チャットに接続 ..."); クラス ConnectToChatAsync は AsyncTask を拡張します {

            @Override
            protected Integer doInBackground(Context... params) {

                try {
                    Listener.currentActivity = context;
                    ChatUtil.getXmppConnection(nickname);

                    return SERVER_SUCCESS_RESPONSE;
                } 

                catch ( XMPPConnectionFailedException e) {
                    System.err.println("XMPPConnectionFailedException : " + e);
                }

                return CONNECTIVITY_PROBLEM;
            }

            @Override
            protected void onPostExecute(Integer result) {
                super.onPostExecute(result);

                if(result == CONNECTIVITY_PROBLEM){
//                      ApplicationDialog.showFeedBackDialog(ProjectConstants.XMPP_CHAT_FAILED, context);
                }
            }
        }

        new ConnectToChatAsync().execute();
    }

それはあなたをプログラム的に解決するはずです。あなたがしなければならないのは、Openfire環境をセットアップすることだけです。

これらのリンクは、その部門であなたを助けるはずです

  1. iChat または任意の Jabber クライアントで動作する独自の Jabber ベースのサーバーを作成します
  2. DIY: Openfire 社内チャット サーバーをセットアップする
于 2013-07-05T19:31:35.060 に答える