首页 > 移动开发 > XMPP_Android上测试收发即时文本消息

XMPP_Android上测试收发即时文本消息

smack插件下载地址:http://www.igniterealtime.org/downloads/index.jsp  (截至2013.11.7,最新版本是3.3.1了),

更详细信息可以参考:smack_3_3_1/documentation/index.html

服务器使用Openfire,客户端的开发借助开源的Smack。

Smack插件可以很方便的嵌入到JDK 1.5或更高的Java应用程序中。除了Jingle语音聊天功能外,Smack没有外部依赖关系。

基于此来测试Android终端之间收发即时文本消息。

在应用中使用网络服务时,一定要在应用的Manifest文件中声明权限。核心代码如下所示。

[java][/java] view plaincopy

  1. <uses-permission android:name="android.permission.INTERNET" />

1.1登录上线

实现用户(已注册过)之间的即时通信,首先,用户必须与Openfire服务器建立连接。用户与Openfire服务器建立连接成功,会创建XMPPConnection对象。XMPPCOnnection类用于与XMPP服务器创建一个连接。

一旦连接创建成功,需要进行登录。XMPPConnection提供了login方法,输入正确用户名和密码实现登录。核心程序段如下所示。

[java][/java] view plaincopy

  1.   /** Openfire服务器Address */
  2. private final static String server = "xx.xx.xx.xx";//服务器IP地址
  3. private static ConnectionConfiguration configuration;
  4. private static XMPPConnection connection;
  5.    //XMPP协议默认端口为5222.
  6.    configuration = new ConnectionConfiguration(server, 5222);
  7.    //与IP为server 的服务器创建连接
  8. connection = new XMPPConnection(configuration);
  9.    if (null != connection && connection.isConnected()) {
  10.        //登录特定用户
  11.        connection.login(userName, passwd);//用户名和密码进行登录

其中,connection即为用户(userName)与Openfire服务器之间的连接信息的媒介。一旦登录成功,就可以与其他人进行聊天了。

1.2 向其他用户发送即时消息

从客户端发到XMPP服务器的消息叫做IQ包(封装成XML)。已登录的用户向其他用户发消息时,需要将个人JID、消息接收者JID、消息内容等信息封装成XML信息(即IQ包)以服务器为媒介进行传送。每一次用户之间的聊天,ChatManager都会为其创建一个线程。下面的代码显示了创建一个Chart并发送文本消息。

[java][/java] view plaincopy

  1. String senderJID;//假设被发送者的JID已经获取到.
  2. //注:JID信息为 “用户名@服务器名”.
  3. String sendMsg;//假设欲发送的信息已经获取到.
  4. //假设已经登录成功并创建connection
  5. ChatManager cm = connection.getChatManager();
  6. Chat chat =  chatManager.createChat(senderJID, null);
  7. Message sendMsg = new Message();
  8. sendMsg.setBody(sendMsg);
  9. sendMsg.setFrom(connection.getUser());
  10. chat.sendMessage(sendMsg);

这样,消息就可以发送到Openfire服务器端,服务器端会判断用户是否在线,确定推送到对方客户端或者保存为服务器离线消息。

1.3 接收即时消息

已登陆的用户,可以拦截服务器端推送过来的新消息。为了获取这些新消息,可以注册一个消息监听器去接收所有的消息。ChatManager中的addChatListener方法用来注册监听器ChatManagerListener。实现ChatManagerListener接口的processMessage负责在接收到到服务器端发来的Chart信息时执行处理。

首先,实现ChatManagerListener接口。

[java][/java] view plaincopy

  1. class MyChatManagerListener implements ChatManagerListener {
  2.     /**
  3.       * 实现消息监听处理接口
  4.        * */
  5.      public void chatCreated(Chat chat, boolean arg1) {
  6.         chat.addMessageListener(new MessageListener() {
  7.            public void processMessage(Chat arg0, Message msg) {
  8.                     //接收到即时消息时,进行处理....
  9.                  }
  10.               }
  11.     });
  12. }

随后,获取ChatManager 实例,通过它注册消息监听。

[java][/java] view plaincopy

  1. //假设已经登录成功并创建connection
  2. ChatManager cm = connection.getChatManager();
  3. cm.addChatListener(new MyChatManagerListener());

自此,Android终端上即时消息的收和发测试就成功了。

下面是我写的一个简单的客户端demo,下载地址:http://pan.baidu.com/s/1kUA2k

声明一下,这只适用于 初学者快速了解一下 smack 的使用,具体的项目,还请仔细 做一下设计。

不恰当之处还请 指出。


本文固定链接: http://www.devba.com/index.php/archives/3431.html | 开发吧

报歉!评论已关闭.