Android asmack使用介绍

XMPP协议简介

XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍。利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信。

这篇文章有基本的介绍,http://blog.csdn.net/xutaozero21/article/details/4873439

IM

Instant Messenger,及时通信软件,就是大家使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基于XMPP 协议的一个实现,其他的则不是。当前IM 几乎作为每个上网者必然使用的工具,在国外的大型企业中有一些企业级的IM应用,但是其商业价值还没完全发挥出来。设想既然XMPP 协议是一个公开的协议,那么每个企业都可以利用它来开发适合本身企业工作,提高自身生产效率的IM;甚至,你还可以在网络游戏中集成这种通信软件,不但让你可以边游戏边聊天,也可以开发出适合游戏本身的IM 应用,比如说一些游戏关键场景提醒功能,团队语音交流等等都可以基于IM来实现。

这里使用openfire、smack和spark,完成xmpp IM实现,这里简单介绍一下这3个的作用:

openfire主要是作为服务器,负责管理客户端的通信连接,以及提供客户端一些通信信息和连接信息。

Smack主要是xmpp协议的实现,提供了一套很好的api,所以下面操作xmpp都是通过使用smack的api来实现,当然因为是在android里,所以使用的是asmack这个包,里面方法跟smack包差不多。

Spark 是IM客户端的实现,其实就是使用了smack 的api实现的。


ASmack 使用

一、连接服务器
//配置文件  参数(服务地地址,端口号,域)
ConnectionConfiguration configuration = new ConnectionConfiguration("192.168.0.110",5222,"");
//设置不需要SAS验证
configuration.setSASLAuthenticationEnabled(false);
//设置安全类型
configuration.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
//建立连接
XMPPConnection conn = new XMPPConnection(configuration);


二、注册模块

注册有两种方法:

一种是用createAccount ,不过我测试了一下发现不能创建用户,具体原因不详,下面介绍第二种。

AccountManager accountManager = conn.getAccountManager();
try
{
   
accountManager.createAccount("saliya", "123456");
} catch (XMPPException e) {
   e.printStackTrace();
}

一种是通过Registration类进行

Registration reg = new Registration();
//设置类型
reg.setType(IQ.Type.SET);
//发送到哪
reg.setTo(conn.getServiceName());
//设置用户名
reg.setUsername("keven1");
//设置密码
reg.setPassword("123456");
//设置其余属性(可选)
reg.addAttribute("android", "geolo_createUser_android");

//创建包过滤器
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()), new PacketTypeFilter(IQ.class));
//创建包收集器
PacketCollector collector = conn.createPacketCollector(filter);
//发送包
conn.sendPacket(reg);

//获取返回信息
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// 取消收集
collector.cancel();
//通过返回信息判断
if (result == null) {
   Toast.makeText(getApplicationContext(),"服务器异常" ,Toast.LENGTH_SHORT).show();
} else if (result.getType() == IQ.Type.ERROR) {
   if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
       Toast.makeText(getApplicationContext(),"注册失败,用户已存在" , Toast.LENGTH_SHORT).show();
   
} else {
       Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
   
}
} else if (result.getType() == IQ.Type.RESULT) {
   Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
}

三、登录

1、登录

conn.login("kooeasy","********");

2、获取联系人

Roster roster = conn.getRoster();    //获取名册
Collection<RosterEntry> entries = roster.getEntries();    //获取联系人

3、获取名片

//创建名片
VCard vCard = new VCard();
//加载名片(连接,用户)
try {
   vCard.load(conn, user);
   //获取头像
   ByteArrayInputStream inputStream = new ByteArrayInputStream(vCard.getAvatar());
   Bitmap mAvatar = BitmapFactory.decodeStream(inputStream);
   ...
} catch (XMPPException e) {
   e.printStackTrace();
}

4、添加好友、分组

Roster roster = conn.getRoster();

roster.createGroup("group");

try {
    roster.createEntry("userName","user",new String[]{"Group"});
   
    roster.removeEntry();
} catch (XMPPException e) {
    e.printStackTrace();
}
四、发送消息

//创建聊天管理器
ChatManager chatManager = conn.getChatManager();
//创建一个聊天:(用户,聊天监听)再此添加聊天监听无法监听Bug?
Chat msg = chatManager.createChat(user, null);
//给聊天管理器添加了聊天监听
chatManager.addChatListener(new ChatManagerListener() {
   @Override
   public void chatCreated(Chat chat, boolean b) {
       //给聊天,添加监听
       chat.addMessageListener(new MessageListener() {
           @Override
           public void processMessage(Chat chat, Message message) {
               Log.i("MSG", message.getBody());
           }
       });

   }
});
try {
   //开始发送消息
   msg.sendMessage("你好 能收到吗?");
} catch (XMPPException e) {
   e.printStackTrace();
}



关于Smack

XMPP——Smack[1]连接、登陆及账户操作

XMPP——Smack[2]会话、消息监听、字体表情和聊天窗口控制

XMPP——Smack[3]用户列表,头像,组操作,用户操作

XMPP——Smack[4]状态,心情,头像更改

XMPP——Smack[5]文件传输及离线消息的获取

以上仅做参考,更多请参看 smack 4.0



转载于:https://my.oschina.net/kooeasy/blog/476847

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值