V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luin
V2EX  ›  问与答

Android的推送方案

  •  
  •   luin · 2012-11-16 16:26:52 +08:00 · 8566 次点击
    这是一个创建于 4390 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近的一个项目需要推送信息到手机上,iOS自然没问题,可是Android却不知道怎么实现好。找了一下没有太合适的方案,只有“极光推送”看起来似乎能解决问题,可是不知道稳不稳定。

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

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

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

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

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

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

    @luin 我说的第二条就是直接用socket传数据,第三条是socket+http。直接socket传数据的话,对服务和客户端都有相对高(相对http和小数据socket)的要求。所以如果,两方对socket不很熟悉的话,很可能不稳定,那么还是用第三种比较折中稳定的方法。
    holmesabc
        7
    holmesabc  
       2012-11-16 18:24:50 +08:00
    @explon 对了andorid 2.2之后是有统一的推送的,不过因为是google的服务,所以你懂的。。。
    Visoar
        8
    Visoar  
       2012-11-16 20:19:25 +08:00   ❤️ 2
    最近也在关注这个部分,除了自行搭建(好像不太有非常成熟方案,欢迎提供)。除了LZ提到的极光推送,还找到了个 http://www.igetui.com/,看他的宣传是说新浪微博和马桶在用。未自行测试。
    同求解更优方案。。顺便...万恶的GFW。。
    luin
        9
    luin  
    OP
       2012-11-16 20:43:58 +08:00
    @Visoar 啊是的,我也看过个推。可是个推的文档不全,也没有明确标明价格...
    Visoar
        10
    Visoar  
       2012-11-16 20:53:21 +08:00
    @luin 另外百度bae也有个channel服务,也是推送的。。暂时不知道靠谱不靠谱
    reorx
        11
    reorx  
       2012-11-16 21:00:53 +08:00
    看到这个帖子的我,眼泪掉下来 T﹏T
    luin
        12
    luin  
    OP
       2012-11-16 21:03:56 +08:00
    @reorx 你肿么了...
    Yo_oY
        13
    Yo_oY  
       2012-11-16 21:24:45 +08:00
    推荐下Parse( https://www.parse.com/ ),用过,感觉很成熟的样子。
    不过Android老这么让程序自己后台跑进程来检测总不是个事儿啊,程序装得越多越慢。
    luin
        14
    luin  
    OP
       2012-11-16 21:33:34 +08:00
    @Yo_oY 所以希望有个框架,比如个推或极光推送。使用同一个框架的应用貌似可以共享推送进程。
    fajaven
        15
    fajaven  
       2012-11-19 09:08:18 +08:00
    @vven Apple APNs, Google GCM 等标准的推送系统,都是长连接的方式的。也只有这样,才能够做到:1)及时地推送;2)节省电量、流量。
    当然要做到真正地节省资源,同时能够承担大容量并发,并且成本还要尽可能低(毕竟要一直维持连接的),是很有挑战的。
    fajaven
        16
    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
        17
    acen  
       2012-11-22 05:56:23 +08:00
    @Yo_oY 如果只用他们的推送,却要带上一个巨大的SDK,好讨厌的感觉--
    liqinliqin
        18
    liqinliqin  
       2012-11-22 09:33:54 +08:00
    @holmesabc 确切的说,是进程sleep,没有外部事件不会唤醒,不参与进程调度,比如长连接read应用,可以阻塞进程睡眠,这样省电。
    kidfolk
        19
    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
        20
    sqbing  
       2012-11-22 13:00:18 +08:00
    一个题外话,有没有socket大数据量通信的示例?比如使用消息长度字段,前引导字段等等
    fajaven
        21
    fajaven  
       2012-11-27 13:30:28 +08:00
    @kidfolk GCM不稳定(Google服务的不稳定)只是一个方面,小的方面。
    更大的方面在于,国内大部分的手机,完全不内置任何 Google 服务,当然也用不了 GCM。
    我们原来做过应用,内置过 C2DM(GCM老版本),只有 5% 的用户可用。
    kidfolk
        22
    kidfolk  
       2012-11-29 14:58:54 +08:00
    @fajaven 请问是什么类型的应用?
    目前主流的android手机都是有google服务的,非主流的目前不在支持列表里面
    l0wkey
        23
    l0wkey  
       2012-11-29 15:57:25 +08:00
    @kidfolk “目前主流的android手机都是有google服务的”。。。你们的用户群真好
    luin
        24
    luin  
    OP
       2012-11-29 16:26:38 +08:00   ❤️ 1
    我准备使用极光或个推的推送服务,等用段时间写些评测...
    kidfolk
        25
    kidfolk  
       2012-11-29 22:22:42 +08:00   ❤️ 1
    @l0wkey 我们只支持国内三星,摩托,htc,小米,魅族这些主流手机,连google基础服务都砍掉系统不支持也罢。
    自己实现推送,一个应用占一个服务,那才是最不好的用户体验。android本来就已经够混乱的了,就别再添乱了:)
    kidfolk
        26
    kidfolk  
       2012-11-29 22:24:14 +08:00
    @luin 我们下一步准备使用gcm,等用段时间写些使用感受。
    little_cup
        27
    little_cup  
       2012-11-29 22:54:31 +08:00
    @kidfolk 为你这样有原则的开发者鼓掌!
    l0wkey
        28
    l0wkey  
       2012-11-30 00:26:08 +08:00
    @kidfolk 国内 [国行的] 三星,摩托,htc...都是没有google服务框架的哦
    kidfolk
        29
    kidfolk  
       2012-11-30 09:13:52 +08:00
    @l0wkey 大部分是有的吧,不排除个别设备比较反人类。以前见过一个三星的Galaxy Tab就把google服务给砍掉了。
    往大了说,手机厂商跟google争主导权,导致几个大的android手机厂商都想做应用商店,都想做平台。我觉得对于开发者来说,毫无疑问,我们应该站在google一边。其实现在的乱局,开发者要负一定的责任。
    不管怎样了,我们下一步就准备使用gcm了,使用一段时间之后我会再回来这个帖子分享使用感受:)
    l0wkey
        30
    l0wkey  
       2012-11-30 10:53:32 +08:00
    @kidfolk 建议你抽个时间调查一下。如果你们的用户群体多数用的是国行手机的话。
    fajaven
        31
    fajaven  
       2012-12-04 11:37:26 +08:00
    @kidfolk 上面 @10whey 已经说了,国内正式公开渠道发售应该都没有 Google的服务。水货的才有。比如,运营商话费送的。
    fajaven
        32
    fajaven  
       2012-12-04 11:40:22 +08:00
    @kidfolk 很期望看到GCM分享信息。我们公司原来做个应用,有用过C2DM(GCM前身),统计数据显示,只有 5% 的用户可以用起来。
    对了,是否有 Google 服务,还仅是一个方面,还需要,用 Google帐户需要登录。
    我们当前也没有想到,国内有Google服务的手机并且登录Google帐户(Gmail帐户)的比例会如此之低。
    deanguqiang
        33
    deanguqiang  
       2012-12-04 11:57:44 +08:00
    @fajaven 在中国android用户中,有google账户的都不会超过两成吧……
    fajaven
        34
    fajaven  
       2012-12-04 13:36:20 +08:00
    @deanguqiang 我相信不会超过两成。但还有GFW的因素,导致很多用户即使有 Google帐户但也没有作为主要帐户在用了。 使用GCM的角度,还需要这个有 Google帐户的用户,同时使用的是包含有 Google服务的 Android手机。所以,仅推理来看,5% 的使用用户也是合理的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:04 · PVG 01:04 · LAX 09:04 · JFK 12:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.