文档章节

Android asmack使用介绍

让代码飞一会
 让代码飞一会
发布于 2015/07/10 07:51
字数 1126
阅读 5858
收藏 26

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



© 著作权归作者所有

让代码飞一会
粉丝 171
博文 36
码字总数 3406
作品 0
海淀
项目经理
私信 提问
android中实现消息推送(转)

关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还...

TracyZhang
2012/08/23
0
0
android asmack 注册 登陆 聊天 多人聊天室 文件传输

XMPP协议简介 XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继...

程序袁_绪龙
2014/11/28
0
1
用androidpn来实现推送

关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还...

小近
2014/10/24
2.1K
3
android+openfire实现IM,搜索用户出现异常

我用openfire做通信服务器,android端使用asmack 搜索用户 红色箭头标记出现remote-server-not-found,请问有知道怎么解决的?

nickyyu
2015/10/14
534
2
Smack 4.1.0-alpha1 发布,XMPP 客户端开发包

Smack 4.1.0-alpha1 发布,此版本在 Smack 再开发历史上是个里程碑版本,因为是在 Android 上本地运行的第一个版本,这意味着 aSmack 不再是必须的,未来将会被淘汰,作为为 4.0 稳定版本的固...

oschina
2014/09/14
5.3K
5

没有更多内容

加载失败,请刷新页面

加载更多

适合钱包应用开发的ERC20代币数据集

Erc20Tokens数据集包含超过1000种主流的以太坊ERC20代币的描述数据清单和图标,可用于钱包等区块链应用的开发,支持使用Java、Python、Php、NodeJs、C#等各种开发语言查询主流ERC20代币的相关...

汇智网教程
35分钟前
1
0
micro微服务 基础组件的组织方式

micro微服务 基础组件的组织方式 简介 micro是go语言实现的一个微服务框架,该框架自身实现了为服务常见的几大要素,网关,代理,注册中心,消息传递,也支持可插拔扩展。本本通过micro中的一...

魂祭心
今天
4
0
简单的博客系统(三)使用Django的后台管理功能

Django新建项目和应用后,自带有后台管理功能,可直接使用 创建后台管理员账户 (demosite) E:\PycharmProjects\demosite>python manage.py createsuperuserUsername: adminEmail address:...

ZeroBit
今天
3
0
The /usr/local/mysql/data directory is not owned by the 'mysql' to '_mysql' user

20190720 经过前两天折腾环境,重装了 apache 和 mysql 之后,今天调试程序是突然发现,本机的 mysql 起不来了! 在启动面板上,显示有这样一行小字 (抱歉!光顾着解决问题,没有记录下来图片...

wwzzhh166
今天
4
0
centos安装增强功能出现kernel headers not found for target kernel解决办法

最近新安装一个centos虚拟机,在安装增强功能的时候出现了,kernel headers not found for target kernel的错误。特记下我的解决方案。 1.update kernel yum update kernel -y 2.Install the...

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部