Uniqush是一个自由和开放源码软件,它提供了一个移动设备的统一的推送服务。
通过服务器端运行 uniqush,你可以到任何受支持的移动平台接受推送通知。
手机推送, Golang, C2DM, APNS, Android, iOS
= 功能描述 =
更清晰的配图版功能描述在这里: http://uniqush.org/wiki/UniqushStory
目前的主要智能手机平台(Android, iOS, BlackBerry, Windows Phone)都会提 供针对各自平台的推送服务。简单说来,这种服务的工作方式是:
第三方App服务器有一些消息,需要推送给手机上的App -> 第三方App服务器把消 息发送给特定平台的云服务(推送服务) -> 该云将消息推送到客户手机
这种方式的确简化了第三方服务器的开发,但是如果需要支持多个平台,则需要针 对各自平台做相应调整。Uniqush目前主要工作是在第三方服务器与各自平台的云 服务之间建立起一套统一的接口,这样第三方服务器就可以不用修改,而支持更多 的只能手机推送平台。
注意:uniqush是一个软件,而不是一个推送服务。换句话说,uniqush的用户 需要在自己的服务器上运行uniqush。uniqush.org并不提供任何推送服务(好吧, 这么说似乎有点多余,不过的确有好多人误以为如此)。
= 第三方依赖 =
目前在github上有两个branch,分别针对当前go的release版本和go的weekly版 本。需要依赖的第三方数据库是redis;依赖的第三方库包括redis.go和goconf。
redis.go的正式版本已经无法用最新的go release编译,为此我fork了redis.go这 个项目。代码在http://github.com/monnand/redis.go 上。同样是两个branch, 分别对应go的最新release和weekly版本。大家都知道,最近go的weekly变化很 大,是为了向go1转。所以weekly和master这两个branch也会差别较大。
goconf的官方版可以支持go的最新release(r60.3)。如果用weekly版本的话,需 要gofix再手动改些东西。我手头已经有了修改,但是鉴于goconf目前还比较活 跃,就没再fork出另外一个代码库。
= 代码成熟度 =
这个项目是在今年8月底开始开发,9月份正式实现了现有功能,十一的时候接口做 过一次大调整,之后就是bug fix,用gofix来跟进最新版的go,还有就是提高性能 (加入对象池,缓存等等)。
目前支持android和iOS两个平台的推送。本来打算再加入对windows phone的支 持,但是鉴于手头没搞到设备,只好暂时放弃了。个人认为,代码结构还算说得过 去,所以再加入一个平台的支持不会有啥大改动。
现在还没有做过大规模的测试,但是基本都可以按预期实现相应功能。
基本说来,俺对自己代码还有点信心。
= 项目知名度 =
零,或者约等于零。原因大约是这样的: - 只是在golang的列表上发过一个ANN,还有就是在几个朋友圈子里内部聊过 - 本来计划11月左右在各个社区里说说这项目,可后来要么是我太忙,要么是看到 了go1的消息,总之,我打算改变计划,等Go1了(但愿Go1不要成为下一个Perl6) - Go语言变化太快——准确说,是标准库变化,尤其是最近的几个weekly版本,已经 无法单纯用gofix来升级代码了,必须手动修改一些代码。我还是希望等go逐渐稳 定下来,在向其他社区宣传。目前基本就集中在go社区和朋友圈子里。
= 项目未来发展计划 =
- 不断跟着Go的升级而更新代码,直到Go1推出 - 在推出Go1之后,在其他社区内发布消息,并着手开发对windows phone的支持—— 好吧,我忽视了黑莓。但是由于黑莓的推送需要第三方安装SDK,这就让俺犹豫了。 - 目前的uniqush只是实现了我计划中的一半功能,另外一半还在设计中。这个我 们可以之后聊。 - 除了服务器端代码外,还要实现各个手机端的开发库,简化手机App的开发
= 总结 =
好了,如果各位对这个项目感兴趣,欢迎参观代码。注意:github上的代码是最新的。