移動設備的統一的推送服務 Uniqush
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上的代碼是最新的。