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 对客户端进行用户名和密码方式的 ...
随机推荐
- bzoj 5297: [Cqoi2018]社交网络
Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发布一条消息 (例如微博.状态.Tweet等)后,他的好友们也可以看见这条消息,并可能转 ...
- ●POJ 3237 Tree
题链: http://poj.org/problem?id=3237 题解: LCT 说一说如何完成询问操作就好了(把一条链的边权变成相反数的操作可以类比着来): 首先明确一下,我们把边权下放到点上. ...
- ●线段树题之wows
●模拟考试的一道似乎是学长出的题,还不错,挺考代码能力的.以此记录. ●题目以被上传(改了改说法),6128 Lence的方块们 ● (像手纸一样长的贴图……) ●题目大意: 有横向排布的n个点,每个 ...
- 【poj 1087 a plug for UNIX】
在大米饼的帮助下,终于找到了大米饼程序中如同大米饼一般的错误! 考点在问题转化,然后就跑一个你喜欢的最大流算法(二分图可以啵?) 再来一个例子吧: [纯手绘大米饼图片] 其中有的边权是1,否则就是in ...
- poj 3904(莫比乌斯反演)
POJ 3904 题意: 从n个数中选择4个数使他们的GCD = 1,求总共有多少种方法 Sample Input 4 2 3 4 5 4 2 4 6 8 7 2 3 4 5 7 6 8 Sample ...
- [BZOJ]1047 理想的正方形(HAOI2007)
真·水题.小C本来是不想贴出来的,但是有一股来自东方的神秘力量催促小C发出来. Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和 ...
- Windows下免安装版mysql5.7的初始密码
MySQL5.7之后,初始密码不在默认为空,而是随机生成的密码. 在mysql/data目录下,生成了一个.err文件(等同linux下的log日志文件,此文件会被mysql服务占用). 使用记事本可 ...
- 求n的阶乘
import java.util.Scanner; public class J { public static void main(String args[]) { //注释:int n=6 ...
- STM8操作LCD5110总结
附上一小段代码: void LCD_init(void) { // 产生一个让LCD复位的低电平脉冲 //LCD_RST = 0; GPIO_WriteLow(LCD_PORTG, LCD_RST); ...
- Java锁机制了解一下
前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍 只有光头才能变强! 本文章主要讲的是Java多线程加锁机制,有两种: Synchro ...