Android的推送方案

2012-11-16 16:26:52 +08:00
 luin
最近的一个项目需要推送信息到手机上,iOS自然没问题,可是Android却不知道怎么实现好。找了一下没有太合适的方案,只有“极光推送”看起来似乎能解决问题,可是不知道稳不稳定。

想知道在实际中各位的项目都是使用什么方式做Android推送的呢?另外有没有人知道新浪微博、人人、Path之类的较大的应用都是使用什么方案实现Android推送的呢?
8410 次点击
所在节点    问与答
34 条回复
vven
2012-11-16 16:34:26 +08:00
在segmentfault上回答过推送的问题:
http://segmentfault.com/q/1010000000121259#a-1020000000127210

目前在用长连接的方式推送,但是具体能承受多少客户端,性能之类的也不是很清楚,没能测试过
explon
2012-11-16 16:37:03 +08:00
Android 的推送就是悲剧, 一个程序开一个后台进程
holmesabc
2012-11-16 16:59:23 +08:00
没什么实时性要求的话,可以直接http轮询。一次拿多个消息。

有实时性要求的话,都是直接socket长链接。

如果又要实时,又不想开发有什么难度的话,可以socket + http,socket长链接做通知,数据用http来传。

当然以上都是自己实现。要用什么推送框架的话,没用过,所以也没什么推荐的。

@explon 其实只是一个线程。很少会有应用开新进程的。
explon
2012-11-16 17:52:08 +08:00
@holmesabc 常见的抠抠跟微信就长期驻留后台, 安卓缺少一个统一的推送 API
luin
2012-11-16 17:52:29 +08:00
@holmesabc 为啥不直接用socket传数据?
holmesabc
2012-11-16 18:24:03 +08:00
@explon 我是说,很少后台会开一个新的进程,而不是说不在后台运行。本来android就没有进程退出这个概念。就算你把一般的应用退出来了,它其实还是在后台缓存着,同样进程是在跑,主线程是在跑的,只是优先级很低。

@luin 我说的第二条就是直接用socket传数据,第三条是socket+http。直接socket传数据的话,对服务和客户端都有相对高(相对http和小数据socket)的要求。所以如果,两方对socket不很熟悉的话,很可能不稳定,那么还是用第三种比较折中稳定的方法。
holmesabc
2012-11-16 18:24:50 +08:00
@explon 对了andorid 2.2之后是有统一的推送的,不过因为是google的服务,所以你懂的。。。
Visoar
2012-11-16 20:19:25 +08:00
最近也在关注这个部分,除了自行搭建(好像不太有非常成熟方案,欢迎提供)。除了LZ提到的极光推送,还找到了个 http://www.igetui.com/,看他的宣传是说新浪微博和马桶在用。未自行测试。
同求解更优方案。。顺便...万恶的GFW。。
luin
2012-11-16 20:43:58 +08:00
@Visoar 啊是的,我也看过个推。可是个推的文档不全,也没有明确标明价格...
Visoar
2012-11-16 20:53:21 +08:00
@luin 另外百度bae也有个channel服务,也是推送的。。暂时不知道靠谱不靠谱
reorx
2012-11-16 21:00:53 +08:00
看到这个帖子的我,眼泪掉下来 T﹏T
luin
2012-11-16 21:03:56 +08:00
@reorx 你肿么了...
Yo_oY
2012-11-16 21:24:45 +08:00
推荐下Parse( https://www.parse.com/ ),用过,感觉很成熟的样子。
不过Android老这么让程序自己后台跑进程来检测总不是个事儿啊,程序装得越多越慢。
luin
2012-11-16 21:33:34 +08:00
@Yo_oY 所以希望有个框架,比如个推或极光推送。使用同一个框架的应用貌似可以共享推送进程。
fajaven
2012-11-19 09:08:18 +08:00
@vven Apple APNs, Google GCM 等标准的推送系统,都是长连接的方式的。也只有这样,才能够做到:1)及时地推送;2)节省电量、流量。
当然要做到真正地节省资源,同时能够承担大容量并发,并且成本还要尽可能低(毕竟要一直维持连接的),是很有挑战的。
fajaven
2012-11-19 09:23:17 +08:00
@luin 你说得对,极光推送 (http://jpush.cn) 在有多个应用都使用时,会去重用连接。

极光推送原理上与 Apple APNs, Google GCM 类似,也参考了他们的设计,都是一个长连接长期维持在那里的。这样做主要是后台负载非常地大,在客户端来说,电量、流量消耗都比轮询来得要小。

我们最近写了篇文章:极光推送技术原理:移动无线网络长连接 http://blog.jpush.cn/index.php/jpush_wireless_push_principle/

希望这篇文章可以帮大家更多地理解移动推送技术。
acen
2012-11-22 05:56:23 +08:00
@Yo_oY 如果只用他们的推送,却要带上一个巨大的SDK,好讨厌的感觉--
liqinliqin
2012-11-22 09:33:54 +08:00
@holmesabc 确切的说,是进程sleep,没有外部事件不会唤醒,不参与进程调度,比如长连接read应用,可以阻塞进程睡眠,这样省电。
kidfolk
2012-11-22 11:37:02 +08:00
1、gcm真的有传言的那么不稳定吗,还是因为gfw的关系,大家主观觉得gcm一定不稳定?
2、android手机上google自家的app,比如gmail的推送是没问题的。如果gmail是采用gcm,那么gcm的稳定性还是可以的。
3、国外的一些应用,比如pocket,推送通知很稳定,这些应用采用gcm的可能性比较大。
综上,个人觉得gcm应该没有传言的那么不稳定。v2ex上有人用过gcm吗,希望用过的人人出来分享一下经验。
sqbing
2012-11-22 13:00:18 +08:00
一个题外话,有没有socket大数据量通信的示例?比如使用消息长度字段,前引导字段等等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/52546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX