使用XMPP协议+Openfire+Smack开发即时通讯

做毕设,涉及到了使用XMPP协议+Openfire+Smack开发一个手机应用的子模块,找到些资料,用来分享。找过很多参考的资料,但就一个比较新而且简洁清晰的,故而收藏并转载(小白见谅)。

什么是XMPP?

XMPP(Extensible Messaging and Presence Protocal,可拓展消息与在线协议),是一种基于可拓展标记语言XML的协议,具有开放性、拓展性、安全性良好等诸多优势,可以实现与使用其他协议的及时通信软件的互通互联,发展前景良好。XMPP解决了IM系统不能与其他非IM系统互联的问题。在XMPP协议中,无论是即时消息还是在线状态都基于XML(查自:基于XMPP协议的Android即时消息APP的设计与实现_杨继承)。

参考文档:http://www.igniterealtime.org/projects/smack/documentation.jsp

API手册:http://download.igniterealtime.org/smack/dailybuilds/javadoc/

 注意:基于smack4.1开发IM时,在导入smack本身的jar包之外,还需要以下第三方库的支持,请事先准备下载: 1. commons-logging-1.2.jar 2. httpclient-4.4.jar 3. jxmpp-core-0.4.1.jar 4. jxmpp-util-cache-0.4.1.jar 5. minidns-0.1.1.jar 6. xpp3-1.1.4.jar( 开发smack4.1.5 实现xmpp 所需要的所有jar,包括jxmpp-core-0.4.1,jxmpp-util-cache-0.4.1,minidns-0.1.3  链接为:http://download.csdn.net/detail/kill_bugs/9392315 )

PS:注意事项均为遇到问题后在网上寻到,请自行辨别!

下面是转帖内容:

Openfire部署:http://blog.csdn.net/shimiso/article/details/8816558

Spark下载:http://www.igniterealtime.org/downloads/index.jsp

APP的简单实现:http://www.cnblogs.com/5207/p/5377510.html

下面是一个APP的简单实现

简单的写了一个单例的类:XmppConnectionService,主要是负责与Xmpp服务器的通讯管理,这里面最主要的就是建一个连接,由于smack(4.1.x)的版本更新后和之前老的api不一样了。所以在我在网上看到很多资料都是比较老的写法,试了一段时间都是失败。后来找到方法:

复制代码

public void Connect (String userName, String pwd){
        if (_xmppConnection != null && _xmppConnection.isConnected()) {
            return;
        }

        XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
        configBuilder.setHost("192.168.45.41");
        configBuilder.setPort(5222);
        configBuilder.setUsernameAndPassword(userName, pwd);
        configBuilder.setServiceName("zrtc");
        configBuilder.setCustomSSLContext(getSslContent());
        //configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);

        _xmppConnection = new XMPPTCPConnection(configBuilder.build());
        new Thread() {
            @Override
            public void run() {
                try {
                    _xmppConnection.connect();
                    _xmppConnection.login();
                } catch (IOException e) {
                    Log.e("XMPP_CONNLOGIN", e.getMessage());
                } catch (XMPPException e) {
                    Log.e("XMPP_CONNLOGIN", e.getMessage());
                } catch (SmackException e) {
                    Log.e("XMPP_CONNLOGIN", e.getMessage());
                }
            }
        }.start();
    }

复制代码

这段代码里主要是两点注意:

1、服务器通讯要用自定义证书的话要用自定义的SSLConent,说白点就是不验证证书是否可信。这玩意不知道使用有CA签名的证书会不会有这问题。

2、connect要使用线程来执行,这是由于android中不允许在主线程中跑这种耗时的代码,影响界面响应

 

获取登录用户的好友列表:

Roster roster = Roster.getInstanceFor(_conn);
 Set entries = roster.getEntries();

创建聊天会话:

复制代码

private void createChat(Intent intent) {
        _jid = intent.getStringExtra(JID);
        _chat = _chatMgr.createChat(_jid);


        _chat.addMessageListener(new ChatMessageListener() {
            @Override
            public void processMessage(Chat chat, Message message) {
                addMessage(message);
            }
        });
    }

复制代码

会话还可以监听消息,这样对方发来消息就可以进行处理。比如显示在聊天记录里。

 

发送聊天信息:

复制代码

_sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText sendText = (EditText) findViewById(R.id.textinput);
                String msg = sendText.getText().toString();
                if (!msg.equals("")) {
                    Message message = new Message();
                    message.setTo(_jid);
                    message.setBody(msg);
                    message.setType(Message.Type.chat);
                    addMessage(message);
                    try {
                        _chat.sendMessage(message);
                    } catch (SmackException.NotConnectedException e) {
                        e.printStackTrace();
                    }
                    sendText.setText("");
                }
            }
        });

复制代码

还是通过会话_chat,它有一个方法sendMessage就可以将消息发送出去,挺简单的吧。

 

最后贴一下聊天的效果吧,真的好搓:

使用XMPP协议+Openfire+Smack开发即时通讯_第1张图片

 

最后备注一下,这个android的客户端demo代码参考了一个开源项目:https://github.com/siacs/Conversations

转载于:https://my.oschina.net/jermyk/blog/886274

你可能感兴趣的:(使用XMPP协议+Openfire+Smack开发即时通讯)