XMPP(二)-基于asmack+openfire的安卓客户端(仿QQ)的介绍以及个人心得
关于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)的介绍以及个人心得的更多相关文章
- 使用Openfire配置安卓客户端聊天服务器
Openfire是一种即时通信服务器,采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务. Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP( ...
- 安卓高仿QQ头像截取升级版
观看此篇文章前,请先阅读上篇文章:高仿QQ头像截取: 本篇之所以为升级版,是在截取头像界面添加了与qq类似的阴影层(裁剪区域以外的部分),且看效果图: 为了适应大家不同需求,这次打了两个包,及上图 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150 评论- ...
- Android即时通讯开发之XMPP (一)初识XMPP协议和asmack
在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室 ...
- IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端
1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...
- 【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...
- 重温WCF之WCF传输安全(十三)(4)基于SSL的WCF对客户端采用证书验证(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/20/2695397.html 前一篇我们演示了基于SSL的WCF 对客户端进行用户名和密码方式的 ...
随机推荐
- rmdir&rm
rmdir删除空目录,非文件 rmdir [选项] 目录名 rmdir -p 路径 删除路径里子文件夹后父文件夹若为空也一并删除 rmdir -v 目录名 显示删除信息 rm删除文件,非目 ...
- 不用第三方解码库取得图片宽高 附完整C++算法实现代码
在特定的应用场景下,有时候我们只是想获取图片的宽高, 但不想通过解码图片才取得这个信息. 预先知道图片的宽高信息,进而提速图片加载,预处理等相关操作以提升体验. 在stackoverflow有一篇相关 ...
- [SPOJ 10628]Count on a tree
Description 题库链接 求不带修改的树上路径第 \(K\) 小. \(N\) 个节点 \(M\) 组询问. \(1\leq N,M\leq 100000\) Solution 主席树维护树上 ...
- 51 nod 1515 明辨是非(并查集合并)
1515 明辨是非题目来源: 原创基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以 ...
- ●POJ 2187 Beauty Contest
题链: http://poj.org/problem?id=2187 题解: 计算几何,凸包,旋转卡壳 一个求凸包直径的裸题,旋转卡壳入门用的. 代码: #include<cmath> # ...
- 51Nod 1781 跑的比谁都快
香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 n 个点的树的根结点上(即1号点),编号为 i 的点拥有权值 a[i] ,数据保证每个点的编号都小于它任意孩子结点的别号. 我们假定这 ...
- UESTC 618 无平方因子数 ( 莫比乌斯)
UESTC 618 题意:求1到n中无平方因子数的个数 Sample Input 3 1 10 30 Sample Output 1 7 19 思路:与前面的BZOJ 2440相似 #inc ...
- [Codeforces Round #431]简要题解
来自FallDream的博客,未经允许, 请勿转载,谢谢. 好久没写cf题解了zzz 代码比较丑不贴了,cf上都可以看 Div2A. 给你一个长度为n(n<=100)的序列 判断是否可以分成奇数 ...
- Mysql 基于GTID的主从复制(实操)
实现环境: Master 主:192.168.0.102 (Mysql 5.6.36) Slave 从 :192.168.0.103 (Mysql 5.6.36) 步骤1.在主DB服务器上建立复制账 ...
- C++中compile与build的区别
我在前面的博文就提到了GCC编译器工作的四个阶段:预处理.编译.汇编.链接. 感兴趣的同学可以参考:http://www.cnblogs.com/mlgjb/p/7708007.html compil ...