返回上一页

android聊天软件的实现

提问时间:2020-10-10 20:02
共1个精选答案
开心软件网
开心软件网 2020-10-10 20:02
最佳答案

android 聊天软件_类似qq的聊天软件android_android 聊天软件

doc一.聊天软件背景

1.聊天软件,就是通常我们说的即时聊天工具IM,我们常用的聊天软件有QQ,微信,飞信等。

2.需要协议支持,传统的socket编程并不满足聊天的功能,比如服务器与客服端的双向交互,消息的双向推送。

3.在移动互联网时代,我们需要基于移动终端开发新型的聊天软件,以满总大众的需求,常用的移动设备终端操作系统ios,android,wp7等等。

二.技术背景

1.在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,

可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。

在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能。

Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的

android 聊天软件_android 聊天软件_类似qq的聊天软件android

、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。

C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。

但是经过一番研究发现,这个服务存在很大的问题:

1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;

2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,

我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的;

有了上述两个使用上的制约,导致我最终放弃了这个方案,不过我想利用另外一篇文章来详细的介绍C2DM的框架以及客户端和App Server的相应设置方法,可以作为学习与参考之用。

即然C2DM无法满足我们的要求,那么我们就需要自己来实现Android手机客户端与App Server之间的通信协议,保证在App Server想向指定的Android设备发送消息时,Android设备能够及时的收到。下面我来介绍几种常见的方案:

1)轮询:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。

android 聊天软件_android 聊天软件_类似qq的聊天软件android

2)SMS:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,你很难找到免费的短消息发送网关,关于这个方案的实现,可以参考如下链接:。

3)持久连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。

前两个方案存在明显的不足,第三个方案也有不足,不过我们可以通过良好的设计来

三.开发协议

1.目前主流的四种IM(IM:instant messaging,即时消息)分别为: