`
jpush
  • 浏览: 1487 次
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android推送开源方案解析

阅读更多

在 Android 上,因为 Google 自己实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,所以,对于开发者来说,如果需要 Push功能,怎么样选择成为了一个问题。

到目前为止,国内尚没有完全向开发者免费、开放的 Push 服务可用。国外有几家第三方推送服务,但一般都要收费。所以一般来说,国内的开发者不得不考虑自己来搭建 Push服务。

自己构建 Push服务时,一个比较自然的选择就是,基于开源的现在方案来做。

使用 Google或者百度搜索 "Android Push 推送"等关键词,表明已经有不少人研究过。排在前边的是这样几篇文章:

上面文章提及的方案里,基本上都提及了一个开源的 Android Push实现: androidpn

androidpn 它本质上服务器端基于 Openfire,客户端基于 asmack,这二者都最 XMPP  IM 开源实现里的二个基本组件,应该说 androidpn 只是把二者更多地结合起来用于做 Push的场景。

本人做过聊天App,愿意在这里,把基于 XMPP开源系统做 IM 的实践经验分享给大家。

我们做聊天类App,比较自然地,刚开始时也是从研究开源的 XMPP IM 系统入手。

先说服务器端选择。Openfire 是一个 XMPP  最古老的开源 IM Server,几乎所有做 IM 的都应该有研究过。但是,它也是最不合适运用到生产的 IM Server,因为:单机并发很有限,集群方案不成熟,代码古老而缺乏及时更新。举个具体的例子:Openfire 的集群组件叫 Connection Manager,但是,你在 Openfire官方网站可以看到,最近一个版本是 2009 年 2 月份发布的。可见,基于 Openfire 实现的 androidpn 的根基是不够稳的。

还有另外二个其实相对好一点的选择: ejabberdtigaseejabberd 是用 Erlang语言实现的,懂 Erlang 的用户很少,所以一般不会选。我们当时初步的聊天服务器端选择是 tigase

tigase 作者维护很活跃,集群测试结果能够支撑比较大的容量,这是吸引我们的地方。但经过实际生产运营情况来看,由于其集群方案实现的复杂性,以及单节点容量的有限,我们对支撑到 50 万用户在集群节点上没有信心,所以在到达 50 万用户之前,赶快自己开发了替代方案。

再来说 XMPP 协议与客户端的问题:对于移动客户端来说,原始的 XMPP 有些复杂而且流量消耗大。XMPP 本质上协议体都在字符串的 xml 结构上,每个协议都量一堆的字符串,xml里还有很多无意义的结构。另外,XMPP为了其灵活性,就登录这个事情都需要有 N 个来回。对于手机客户端很在乎流量与电量来说,XMPP 比较笨重。

我们的作法是:协议格式上改为二进制,协议内容上简化交互,但保留对原始  XMPP的兼容。

androidpn 是开源的 Push 实现,是基于 XMPP 开源组件集成的,它没有为手机应用场景做必要的优化。另外,XMPP  本质上双向 IM 协议,而直接基于 XMPP 来实现 Push 功能,也是没有特别地为  Push 的特点优化的,比如客户端网络连接的策略等。

总结一下以 androidpn 为典型的开源 Android Push 方案会存在的问题:

1)容量大了开源服务器实现顶不住,还是需要自己去改进开源实现,或者完全重新用新方案,开发投入与高成本是不可避免的。

2)协议与实现上如流量消耗、网络连接策略等,不是专门为移动 Push 优化过的,是不经济的。

基于我们团队基于 XMPP开源系统实现聊天App的实践经验,我们得出的结论是,在移动端的 IM场景里,开源方案不是个可用好用的方案。后来我们自己完全重新架构了整套系统。之后,正是基于这套全新架构的 IM 系统,演变出来了极光推送

极光推送专门为移动场景下的实时 Push 来研发,我们想要去解决国内 Android 开发者没有可用好用的 Push方案的问题,是免费的,完全向普通开发者开放。如果你也有这个 Android Push 的需求,不妨到极光推送官方网站进一步地了解。

 

分享到:
评论

相关推荐

    Android消息推送的完美解决方案

    开源项目如AndroidPN利用XMPP实现了Android推送,但它可能存在延迟和稳定性问题,且不负责确认消息是否成功送达。 综合考虑,选择合适的推送解决方案应考虑以下因素:网络环境、服务器稳定性、性能需求、成本和开发...

    android推送服务器与客户端1

    "android推送服务器与客户端1"的主题涉及到Android平台上的远程消息推送技术,通常用于通知、更新或者数据同步。在这个话题中,我们将深入探讨Android推送服务的工作原理、实现方式以及相关组件。 首先,Android推...

    android推送服务器和android客户端

    例如,`androidpn-server-0.5.0-bin.zip`可能包含一个开源的Android推送服务器实现,供开发者自建推送服务使用。这样的服务器需要处理注册、注销、消息发送等操作,并且可能支持批量推送和自定义消息格式。 接着,...

    Android 推送

    Androidpn是一个开源的Android推送通知服务,它提供了服务器端和客户端的完整解决方案。这个项目旨在帮助开发者快速集成推送功能,无需深入了解FCM的复杂性。尽管Androidpn项目较旧,但其核心思想和架构仍对理解推送...

    Android 推送技术浅析(1)

    除了自行实现这些协议之外,许多第三方服务提供商也推出了各自的Android推送解决方案。这些服务通常将复杂的协议封装起来,简化开发者的集成过程。例如: - **AirPush**:一家国外知名的推送服务提供商,提供了一...

    android Mqtt推送 源码

    【Android MQTT推送源码解析】 在移动应用开发中,实时通信功能是不可或缺的一部分,而 MQTT(Message Queuing ...通过以上步骤,你可以构建一个可靠的Android推送系统,确保实时消息在移动设备上得到有效的传递。

    android使用RTMP实现录屏直播推送音视频.zip

    在Android中,可以使用开源库如librtmp或ijkplayer的ijkmedia框架来实现RTMP推送。 三、音视频编码 在Android上,通常使用硬件编码器进行高效的视频编码。对于音频编码,可以选择AAC,它是目前广泛使用的音频编码...

    Android消息推送

    - **androidpn**:这是一个开源的Android推送通知项目,它展示了如何自建推送服务。源码中包含了服务器端和客户端的实现,可以帮助理解推送服务的工作流程。 - **smack源码**:Smack是一个XMPP(Extensible ...

    基于Netty框架的Android内网推送demo

    "基于Netty框架的Android内网推送demo" 这个标题表明了这是一个使用Netty框架实现的Android应用内的网络推送演示项目。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于创建服务器和客户端的网络应用,如...

    rtmp推送aac音频流 Android将麦克风采集的数据推送到服务器(RTMPorRTSP).zip

    - 对于RTMP,可以使用开源库如librtmp或Adobe的Flash Media Server SDK来建立连接并推送数据。 - 对于RTSP,可能需要更复杂的处理,因为RTSP涉及到会话管理和控制信息的交互,可能需要用到如live555这样的库。 6....

    Android 仿QQ后台运行时收到推送消息 在顶部弹出 源码

    在Android平台上,实现类似QQ后台运行时收到推送消息并在顶部弹出的效果,主要涉及到的是通知(Notification)管理和自定义头部通知(Heads-up Notification)的使用。本文将深入解析这一功能的技术实现,以及如何...

    c#实现消息推送

    然而,对于Android设备,我们通常需要借助特定的推送服务,如Google的Firebase Cloud Messaging (FCM) 或者自定义的服务器解决方案。在这个场景下,Apollo作为代理服务器,可以帮助我们在C#后端与Android客户端之间...

    PUSH推送源码

    1. **Android推送机制**: Android系统支持多种推送方式,如Google的GCM(Google Cloud Messaging)已被FCM(Firebase Cloud Messaging)取代,以及国内常见的个推、极光推送等第三方服务。这些服务通过在后台维护...

    安卓Android源码——消息推送最新demo +服务器.rar

    "安卓Android源码——消息推送最新demo +服务器.rar"的描述非常简洁,但我们可以推测其中的"最新demo"可能包含了最新的API和技术,例如Google的Firebase Cloud Messaging (FCM)服务,或者是自定义的消息推送解决方案...

    android利用apollo实现消息推送

    5. **处理推送消息**:在`onChange()`方法中,你可以解析接收到的配置变化,如果是新的推送消息,就进行相应的处理,如显示通知或更新UI。 6. **C#后端配合**:在C#后端,你可以使用类似MQTT或自定义HTTP API来处理...

    Android推送框架 androidpn.doc

    AndroidPN(Android Push Notification)是一个基于XMPP协议的开源Android推送通知实现,它包括了客户端和服务器端的完整实现。XMPP(Extensible Messaging and Presence Protocol)是一种用于即时通信和在线状态的...

    基于安卓的信息推送系统

    基于安卓的信息推送系统,是Android平台上的一个重要组件,它允许应用在后台向用户发送通知,即使用户并未直接与应用交互。这个系统的核心在于如何有效地、适时地将消息推送给用户,同时兼顾电池寿命和系统资源的...

    android开源项目源码,完整商城项目源码(服务端+客户端).rar.rar

    《全面解析Android开源商城项目源码》 在当今的移动互联网时代,Android作为全球最大的智能手机操作系统,其开发领域的开源项目源码对开发者来说是宝贵的资源。本篇文章将深入探讨一个完整的Android开源商城项目的...

    Android应用源码基于百度云推送的IM项目.zip

    在分析源码的过程中,我们可以学习到如何在Android应用中管理用户会话、处理网络请求、解析推送消息、以及如何优雅地展示通知等技术细节。此外,还可能涉及到数据库操作,例如使用SQLite存储用户信息和聊天记录。 ...

Global site tag (gtag.js) - Google Analytics