因爲公司以前使用的手機客戶端推送服務是極光推送,給公司形成一年幾十萬的服務費,所以,公司決定開發本身的一套推送服務,初步的技術選型是:android
服務端:netty4安全
關於netty框架在個人下面的博客裏面我整理了相關資料,原本還有一些關於mina的因爲時間緣由暫時沒整理出來。
框架
爲了便於本身測試,本身動手實現瞭如何使用netty完成服務端消息推送以及在Android客戶端如何將接受到的信息顯示在通知欄,總體思路大概是這樣的:異步
服務端使用netty框架開啓基於TCP監聽服務。ide
客戶端發起TCP鏈接(不關閉,長鏈接),並實現心跳包,斷開重連機制。學習
服務端對長鏈接進行管理(接受心跳包,處理異常鏈接),並推送消息。測試
客戶端監聽到消息後顯示在通知欄,查看消息時客戶端會將數據提交到服務端進行統計。netty
服務端對本身來講實現起來比較簡單,可是因爲本身以前沒有搞過android這塊,不得不去補一些有關android的知識,我是這麼分析的:blog
首先須要知道android是經過什麼機制通知系統通知欄顯示東西的。生命週期
其次要了解的是android組件的組成以及各個組件的通訊方式。
OK!有了基本的思路以後就開始在網上找資料了。
android是經過NotificationManager 來異步通知通知系統通知欄的,這裏說的異步可能就決定了我在統計數據的時候有一種數據時統計不了的(用戶人爲關閉了APP通知欄),在網上找了不少資料,又說要root權限又說android系統不會提供關掉通知欄的設置的(實際上個人小米手機上是有那個功能的)。可是我一開始的思路是這樣的,既然會提供手動關閉通知欄的系統功能,那麼系統內部應該廣播一下這個操做才合理一點啊,惋惜的是沒有這個廣播。
關於android的組件大體能夠分爲四大類:
Activity:一般就是一個單獨的屏幕,它上面能夠顯示一些控件也能夠監聽並處理用戶的事件作出 響應。
Service:一段長生命週期的,沒有用戶界面的程序,能夠用來開發如監控類程序。
Content Provider:內容提供者,
BroadcastReceiver:廣播接收器。
他們的通訊通常是使用intent來通訊的,固然爲了安全,裏面都有各自的方式,重寫方法的時候就能拿到組件之間須要發送的信息了。
最後,因爲上面的過程本身只花了一個下午的時間來搭建,android客戶端的代碼基本上都是百度搜到的,故就不把源碼貼出來了,不過本身總算是入門了,總體感受仍是蠻簡單的,操做的時候也沒遇到什麼困難,把思路分享出來但願對一些沒找對學習方法的人有用。
本文出自 「陳硯羲」 博客,轉載請與做者聯繫!