c2dm 使用心得总结

关于 c2dm是什么? 不就多说了,翻墙从youtube下载 Google I/O 2010 – Building push applications for Android (C2DM) 转发到youku 方便观看, 地址为:http://v.youku.com/v_show/id_XMjQ3MTg1NzA0.html

c2dm开发组提供的两个demo,似乎不是那么容易上手,可以试试最简单的的实例, Mark Murphy __The Busy Coder’s Guide To Advanced Android Development__ 的一个例子: https://github.com/commonsguy/cw-advandroid/tree/master/Push/C2DM

程序跑起来了,才有个直观的感受。c2dm整个流程是这样的:
C2DM 流程图

简要说明一下:Android 客户端收到 registration_id 后,给你的app server发个http post,保存registration_id起来。然后你的appserver 给 https://android.apis.google.com/c2dm/send 这个url发送一些参数,就行了。

Mark Murphy的例子用到了Chrome to Phone 一个可重用的包com.google.android.c2dm 用于处理底层的 C2DM 交互事务 (例如配置,任务队列管理等)。但是这个包也是有一些问题的,遇到 “C2DM E Registration error SERVICE_NOT_AVAILABLE” 这个的Error,默认是没有去处理,你需要在AndroidManifest.xml 里声明处理 com.google.android.c2dm.intent.RETRY。

在申请google c2dm 记得ssh 翻墙 注册就行了,firefox + autoproxy, 在规则添加 .google.com 即可。不然会遇到: “Sign Up for Android Cloud to Device Messaging” 链接被重置,提交时总是说还有一两项信息没有填写(其实都填全了)。

服务器端的实现

就是给 c2dm 服务器发 https post 请求,加上一些参数。 写得最简单明了,是这个帖子 Android push notifications (tutorial) 例子中的脚本可以再改进的, Google Auth Token 过一段时间才会失效,我测试所知道的是1个多月,所以可以把它保持起来,提供下次发送数据时使用。我自个儿也写了php实现的版本。关于发送效率,我也是感到比较头疼的,发送数据到几万个终端,如何并发处理?c2dm不支持并发发送数据。目前我只做到重用 http 连接,把registerIds放到队列里,发送失败了,放到队列尾部,重发。

除此之外,c2dm服务在国内很不稳定,把 app server 放在在国外才比较靠谱。

参考:
1. http://goobr.blogspot.com/2010/11/c2dm-sending-messages.html

If you enjoyed this post, make sure you subscribe to my RSS feed!

Comments

13 responses to “c2dm 使用心得总结”

  1. x_bl Avatar
    x_bl

    这个服务已经被和谐了吧?
    https://android.apis.google.com/c2dm/send
    还能用吗?

    1. deli Avatar
      deli

      这个目前还能用。如果有国外的服务器,效果会更好,在国内发送比较慢。

  2. Tinker Avatar

    求博主联系方式?Email或QQ

    Gtalk最好~~

    想详细问问 C2DM一些知识,谢谢了!

    1. deli Avatar
      deli

      About 页面有我的gmail 地址。

  3. Tony Avatar

    博主觉得C2DM的好处是啥呢。
    和自己做server+client通讯比起来。

    1. deli Avatar
      deli

      目前android上最好的push解决方案就是c2dm,好处是使用简单,服务器负载均衡,消息队列处理,都让Google server去处理,不好的地方就是在天朝访问不稳定。自己做server + client,也是基于xmmp协议开发,要处理很多细节的东西蛮多的。如果用户主要是在国内,自己架构 push服务器比较靠谱。

  4. Steve Avatar
    Steve

    请问xmmp和c2dm是什么关系?xmmp在c2dm里扮演的角色是什么?xmmp对push起到什么作用?
    多谢!

    1. deli Avatar
      deli

      hi, 可以参考这一篇,比较早的文章 http://www.iteye.com/topic/901554

      1. Steve Avatar
        Steve

        多谢回复!
        那C2DM通知是如何发送到手机上的,如果手机没有联网?

        1. deli Avatar
          deli

          如果手机没有联网,这条消息会保存在Google c2dm server上,c2dm与gtalk,gmail,market一样,共用一个连接。

          1. Steve Avatar
            Steve

            非常感谢!

  5. … [Trackback]…

    […] Find More Informations here: blog.lytsing.org/archives/559.html […]…

Leave a Reply

Your email address will not be published. Required fields are marked *