天天看點

內建推送(極光+小米+華為)總結(java服務端)

公司app內建了極光推送,前前後後在這上面費了不少時間了,總結下自己的了解和遇到的問題。 隻用過極光推送,是以下面都以極光推送為例。(後面新增小米和華為)

1.、都有什麼品牌的推送服務? 內建什麼品牌比較好?

主流第三方推送有 極光,友盟,個推,百度雲,基本服務都是免費的。另外還有小米推送,華為推送,這兩個在自己的android平台上權限更高,在app程序被殺死的情況下也能推送。

  個人推薦: 個推>友盟=極光=百度雲 ,原因如下。   另外大些的應用還會同時內建小米推送和華為推送,來提高在小米和華為手機上的推送到達率。
           

① 市場占有率是個很重要的名額,在android應用下,app程序被殺死的話,可以通過共有使用了同家服務商的其他app推送通道,來提高到達率。

② 其他方面,比如推送穩定性,耗電量,耗流量,功能全面度等來說,主流的推送服務商差距感覺也不太多,就不怎麼考慮了。另外,應該隻有極光支援winphone推送= =。

可參考:http://www.jianshu.com/p/db3c478d9191

2、 ios和android的推送機制?

了解也不深,就不多說了,個人大緻總結下就是,ios使用的是蘋果官方的推送伺服器APNs通道轉發,android也有官方的推送伺服器GCM,但好像在國内因為牆的關系不太能用,是以第三方都采用直接與應用建立長連接配接的方式推送,導緻權限不高,到達率也低,并且耗電量還高。
           

關于推送機制可參考:https://www.zhihu.com/question/20667886

關于為什麼不用GCM可參考:http://www.52im.net/thread-117-1-1.html

關于android保活的方式可參考:http://www.52im.net/thread-438-1-1.html

3.、定時推送怎麼實作?

極光推送是有定時推送的api的,但我使用的是java的定時任務架構quartz實作的,這樣更靈活一些。
           

4、推送和自定義消息的差別?

推送是指應用外,往通知欄推送内容。

自定義消息是往app内推送資料,這個很靈活,可以借此實作一些無法用http請求實作的功能。比如常見的的app内表示未讀消息的即時重新整理的紅點或角标。
           

5、ios和android 推送到達率的問題? 為什麼android的推送到達率普遍低很多?

在極光推送中,ios的推送成功數代表極光伺服器成功發送到蘋果APNS伺服器的資料,基本與表目标數相差無幾,目标數與成功數之差為失敗數,失敗的原因一般是Apple 判斷 token 失效了,App 已經解除安裝了等。蘋果端的實際到達使用者數統計需要另外設定,我沒有做。ios由于在app程序被殺死的情況也可以收到通知,是以實際到達數排除手機沒電,沒網等情況後,應該也還是較多的。   怎麼配置可以看極光的說明文檔:https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#_9。

  在android端,成功數即代表了實際到達使用者的數量,等于線上到達數+離線到達數。當app處于打開狀态時,計入線上到達數,未打開狀态下app推送會由極光的離線推送機制,等使用者激活app時推送。當使用者在離線時間内(極光免費使用者為5天)未激活app的話,也就永遠收不到了。 是以我們一般需要采用一些手段,使推送能盡量到自己的未激活app,提高到達率。
           
  1. android怎麼提高到達率?

    ①讓自己的app成為白名單。

    方式有兩種,一種是使用者手動設定,一種是像QQ,微信等一樣,被手機廠商預設設定為白名單。
               

    ②使自己的app處于打開或是背景打開的狀态。這個就屬于營運範疇了。

    ③內建小米推送,華為推送等手機廠商的推送服務,這些推送的權限更高,有系統的推送程序。小米推送可以使小米手機上程序被殺死狀态也能推送。華為同理。

    ④被其他app喚醒程序:

    當使用了極光推送服務的其他app被喚醒時,自己app可以使用其他APP的推送通道收到推送,其它推送服務商同理。是以推送服務商的市場占有率越高,自己app收到推送的機率也就越高。極光需要另外配置該功能:https://community.jiguang.cn/t/jpush/2815。
               
    關于android保活的方式可參考:http://www.52im.net/thread-438-1-1.html

後續內建小米推送和華為推送

1.小米推的送

小米的文檔寫的挺明白了,各項功能也還算完整,api邏輯跟極光差不多。最重要的是在小米MIUI系統上是系統級推送,可以在應用被殺死的情況下收到推送。另外小米還支援ios推送,也可以透傳消息,是以完全替代極光是應該是行得通的。
           

2.華為推送

其實也不難,在伺服器端就兩個接口,①是從華為伺服器擷取 通行令牌,②是根據通行令牌調用華為接口推送就好了。但華為吐槽點不少。
           
  1. 內建實際上其實挺簡單,但文檔複雜,寫了一堆細節和原理上的東西,格式也不夠友好,不利于快速上手。隻能推送android。
  2. 功能比較簡單,隻能使用token(RegistrationID)推送,一次最多還隻能是1000條。 統計頁面上資料也比較少。
    1. 新版推送跟舊版推送不相容,舊版推送貌似已經放棄維護,是以我內建的是新版,而且新版推送隻在華為5.1以上才收的到(被這個問題耽誤了半天時間)
  3. 相比較極光,小米,推送管理平台頁面也挺簡陋,各方面細節上都不夠友好。

    推薦快速內建方案:直接下載下傳demo(華為沒有提供對接口封裝後的jar包),對應文檔把一些參數改改就好了。然後拿到移動端給的token就可以推送了。

3.極光+小米+華為推送整合:

應該主要就是解決一個問題,三個平台都推送的情況下,移動端怎麼隻顯示一條資訊?

   我這采用的方法是:

         ①通知欄推送服務端三個推送平台一起推,不用做什麼特别處理。應用内推送(透傳消息)就用極光推。

         ②移動端上(聽同僚說的),小米手機隻初始化極光和小米,之後再把極光通知欄推送這一塊關掉。(因為需要用到極光的應用内消息推送,是以極光還是需要初始化)

                   華為手機隻初始化極光和華為,之後再把極光通知欄推送這塊關掉。

                      其他手機就隻初始化極光推送就好了。