关于XMPP第一篇-openfire的搭建写完后,就一直在赶本篇所要介绍的这个基于asmack+openfire的安卓客户端,费了不少精力,因为有不少同学在还在焦急的等待着(自恋了呵呵),所以紧赶慢赶,现在算做出来了一个比较初级的版本,很多功能还不完善,不过先放出来,供大家一起参考研究,提出问题,共同学习,当然,该项目本人是会不断完善,增加新功能,甚至到后来的群组,有兴趣的话,大家可以继续关注^-^

好了,接下来介绍下本项目实现的功能吧:

1.注册;

2.登录;

3.依昵称查找人员;

4.添加好友(发送好友申请,对方接收好友请求,并同意,方可成为好友);

5.界面上的,包括最近联系人,好友列表等;

6.聊天:目前支持的类型有文本,图片,位置,动态表情等;(这里要说明下,在该初级版本,图片的路径和位置坐标是固定的);

7.退出;

8.免登录;(一次登录成功,则下次启动软件时自动登录);

界面:

界面上的部分功能此版本并未实现,以及一些细节的处理,代码上的优化等都会循序渐进的改进,并在以后的博客中发出。

接下来,杂谈模式开启,其实,纯这种为聊天而生的APP并不多,除了我们熟悉的QQ,微信等之外,其它的社交类应用基本都是将聊天这一块穿插进APP中,并且这种QQ式的添加好友等在现在的社交应用中也通常被改造为关注,被关注或者粉丝等,如比较知名的微博,陌陌等,不知名的那就多了去了。由于XMPP这块儿,互相聊天并不需要双方必须是好友关系,只需知道对方的JID即可收发消息,因此,许多应用也正是看中了这一点,来实现应用中的关注,粉丝等功能,而关注,取消关注,拉黑等功能是可以通过web服务实现的,而XMPP此时只充当了点对点的聊天功能,所以大家也不必纠结xmpp本身自带的邀请好友了,同意好友申请了,获取好友列表了等等,只需大致了解即可,重点是聊天过程的实现,以及客户端跟服务端连接的稳定性(如断线如何重连,XMPP自带的重连很不稳定)等等,当然,若有的同学钻研精神极强,或者公司有需求,那么你可以去深入研究了。

支持XMPP协议的服务端有不少,比较熟悉的就是openfire,而当一个项目真正决定使用openfire作为服务端时,想实现比较复杂点的功能的话或者是符合自己要求的功能,都需要去改造openfire,因为openfire有一定的局限性,但好在其是开源的,另外,一般的社交软件如果使用openfire的话,都是有两个服务端的,一个是自己的web服务端,一个就是openfire服务端,像好友头像,昵称,性别,年龄,地址,以及类似陌陌的照片墙等信息数据都是可通过web服务来存取的,只需web数据库跟of数据库的用户id对应起来即可,而只依靠openfire本身,这些资料的存取是无法实现的。做这个项目时,本打算将web和of结合起来,来实现更复杂更贴近实战的功能的,不过最后放弃了,应为这样工作量太大了,本人也没那么多精力和时间,呵呵!因此,如上说所,我们可以把精力主要集中在聊天,以及如何利用web上存储的大量信息来跟of结合起来,这才是重点!(--个人观点)

好了,现在我们来谈一下聊天过程中,如图片,语音,视频等信息如何通过xmpp传输,我也经常遇到有同学上来就问,xmpp怎么传语音啊,怎么传文件啊之类的(不过现在xmpp好像是支持文件传输了,具体没试过),其实,我们只要认真思考下,就能想到解决办法,xmpp传什么最快,传什么最简单?当然是字符串了!字符串中可以有什么?什么都可以有!因此,我们就可以将我们想要的信息都放进字符串中传输过去,对方收到消息后,解析之,便可得到一切你想要得到的东西,如本项目中,图片,以及位置消息的实现,就是将图片路径或者位置坐标跟接收者以及发送者的信息以某特定间隔符间隔并组装成一个字符串作为message的body发送过去(如:接收者*发送者*消息类型*消息内容*发送时间*。。。等等等),对方收到消息后以“*”拆分便可得到所有信息,岂不快哉?因此,对于图片语音视频等类型的信息,我们都只需要其路径即可,那么路径又怎么获得呢?就像我上面说的,配合web服务,现将图片语音等上传到web服务器获取上传成功后的路径(这个不难吧),然后将路径作为字符串发送给对方,对方接收到消息后按消息类型解析,并根据路径下载图片或语音。。。具体可参考本项目的实现过程!

嗯,先聊到这里吧,后面有时间会继续本博,本项目也会继续更新!

项目源码:http://download.csdn.net/detail/baiyuliang2013/8391863

注意:源码部署后,找到Consts.java中的XMPP_HOST,需要修改为自己的IP地址(of端名称最好与本机IP一致,具体可参看上篇文章--openfire的安装和搭建),另:该客户端是要服务端即openfire支持的,如果不安装of端是运行不起来的。

PS:收到几位同学反馈的几个问题,一是登录成功后收不到好友请求信息,这个上面我说过,注意你的服务器名称要改为你的ip地址即与客户单的XMPP_HOST一致;二是聊天界面收到新消息后不会同步更新,这个因为当时用的一个手机测试的,疏忽了这点,其实这个也不难,可以参考下最近联系人界面的更新方式,即在聊天界面注册一个新消息接收广播,消息Listener中监听到新消息后(注意消息类型),将消息以广播的形式发送出去,聊天界面接到广播,并取出Msg,然后listMsg.add,adapter再notify一下即可,很简单吧,代码我就不贴了,这个大家可以自己琢磨下。。。——2015.01.26

请看下篇:XMPP(三)-安卓即时通讯客户端

XMPP(二)-基于asmack+openfire的安卓客户端(仿QQ)的介绍以及个人心得的更多相关文章

  1. 使用Openfire配置安卓客户端聊天服务器

    Openfire是一种即时通信服务器,采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务. Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP( ...

  2. 安卓高仿QQ头像截取升级版

    观看此篇文章前,请先阅读上篇文章:高仿QQ头像截取: 本篇之所以为升级版,是在截取头像界面添加了与qq类似的阴影层(裁剪区域以外的部分),且看效果图:   为了适应大家不同需求,这次打了两个包,及上图 ...

  3. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  4. openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...

  5. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150  评论- ...

  6. Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

    在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室 ...

  7. IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端

    1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...

  8. 【XMPP】基于XMPP的即时通讯解决方案

    什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...

  9. 重温WCF之WCF传输安全(十三)(4)基于SSL的WCF对客户端采用证书验证(转)

    转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/20/2695397.html 前一篇我们演示了基于SSL的WCF 对客户端进行用户名和密码方式的 ...

随机推荐

  1. Java IO(一)

    在Java中,所有的io类都放在java.io包中. 在IO操作中,我们总是会从一个源数据读取到一个目标数据.那么这个源数据和目标数据可以是文件,流等等.那最常见的就是文件,就像我们在本地电脑上写入东 ...

  2. 计蒜客NOIP模拟赛4 D2T2 跑步爱天天

    YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...

  3. [SCOI2005]最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  4. [SDOI2014]数表

    题目描述 有一张N*m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. 输 ...

  5. ●洛谷P3348 [ZJOI2016]大森林

    题链: https://www.luogu.org/problemnew/show/P3348 题解: LCT,神题 首先有这么一个结论: 每次的1操作(改变生长点操作),一定只会会对连续的一段区间产 ...

  6. ●BZOJ 3309 DZY Loves Math

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3309 题解: 莫比乌斯反演,线筛 化一化式子: f(x)表示x的质因子分解中的最大幂指数 $ ...

  7. 【LSGDOJ 2015】数页码

    题目描述 一本书的页码是从 1-n 编号的连续整数:1, 2, 3, ... , n.请你求出全部页码中所有单个数字的和,例如第 123 页,它的和就是 1+2+3=6. 输入 一行为 n(1 < ...

  8. 【Aho-Corasick automation 大米饼模板】

    自动机要打熟.自动机要打好.自动机要打得美妙. [例子:HDU2222] #include<stdio.h> #include<queue> #include<cstri ...

  9. Linux(CentOs6.3)网络配置

    新装好的虚拟机往往还无法连接网络,本文描述了如何在CentOs6.3系统上配置网络信息 1.windows系统下快捷键windows+r,输入cmd并确定,打开黑窗口 2.黑窗口中输入ipconfig ...

  10. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...