從HBuilderX 1.7.2起,uni-app支持UniPush。
從HBuilderX 2.0.3 alpha起,5+App支持UniPush。php
注意html
UniPush是DCloud推出的集成型統一推送服務,內建了蘋果、華爲、小米、OPPO、魅族等手機廠商的系統級推送和個推等第三方推送。html5
國內Android的Push是一個混亂的世界,由於google的push服務器被牆,因此一些國內的安卓手機廠商各自作了本身的推送,好比華爲小米魅族等,但還有不少國產手機廠商沒有提供官方推送方案。三方獨立公司如個推,則提供了獨立的push方案。
在沒有unipush之前,若是隻使用三方push,會在不少國產手機上由於節電設置而沒法保活push進程,致使沒法推送。好比小米手機對三方推送封殺的比較厲害,App退出後很難成功發送push。
而若是每一個安卓手機的官方push都集成一遍,這麼多平臺,工做量會很是巨大,管理維護也很麻煩。java
uniPush解決了這個難題,開發者只須要開發一次。系統會自動在不一樣手機上選擇最可靠的推送通道發送push消息,保障送達率。python
UniPush即下降了開發成本、又提升了push送達率,而且免費,是當前推送的最佳解決方案。有個unipush,開發者不該該再使用其餘push方案了,其餘方案都達不到unipush的效果。android
UniPush推送服務由「個推」專爲DCloud訂製提供技術支持,所以在服務端的集成與「個推·消息推送」徹底一致。對於以前使用個推的開發者,能夠平滑的遷移到uniPush方案上。
注意:UniPush推送服務必須從新向DCloud申請開通帳戶。json
一般推送消息分如下兩種類型:c#
通知欄消息(推送通知)
UniPush推送服務定義好的推送樣式、後續動做的推送方式,客戶端接收到後顯示在系統通知欄,用戶點擊通知欄消息啓動APP(激活到前臺)。api
透傳消息
即自定義消息,UniPush推送服務只負責消息傳遞,不作任何處理,客戶端在接收到透傳消息後須要本身去處理消息的展現方式或後續動做。
UniPush推送服務對透傳消息的數據符合如下格式時作了特殊處理,將透傳消息顯示到系統通知欄bash
複製代碼{"title": "xxx","content": "xxx","payload": "xxx"}
UniPush僅支持uni-app類型項目,其它類型項目暫不支持
點此查看如何開通UniPush推送服務
注意:開通UniPush後,需在後臺配置「廠商推送設置」,不然可能在服務端下發推送消息界面中不會顯示第三方廠商推送內容(如intent)
獲取廠商推送設置信息請參考:廠商推送應用建立配置流程
使用廠商推送下發推送消息必須設置intent,而且intent須符合格式,不然用戶點擊推送消息會致使沒法啓動APP。intent數據格式以下:
複製代碼intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=測試標題;S.content=測試內容;S.payload=test;end
其中io.dcloud.HBuilder爲APP包名,須要替換爲本身APP的包名;
S.title=的值爲推送消息標題,對應5+ API中PushMessage對象的title屬性值;
S.content=的值爲推送消息內容,對應5+ API中PushMessage對象的content屬性值;
S.payload=的值爲推送消息的數據,對應5+ API中PushMessage對象的payload屬性值;
launchFlags=0x14000000字段,解決接收多條通知後點擊可能沒法觸發click事件的問題
登陸DCloud開發者中心,在「我建立的應用」列表中選擇應用,左側選擇「Uni Push」,打開消息推送頁面。
使用廠商通道必須使用「透傳消息」類型下發推送消息
服務端集成時首先須要獲取AppId、AppKey、MasterSecret參數,登陸DCloud開發者中心,在「Uni Push」下的「應用配置」頁面中獲取,以下圖所示:
參考「個推·消息推送」的服務端快速集成文檔http://docs.getui.com/
經過服務端接口下發推送消息使用廠商通道必須經過「透傳消息」類型下發推送消息
如下是php語言建立消息示例代碼:
複製代碼$payload = '{"title":"測試標題","content":"測試內容","payload":"test"}'; $intent = 'intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=測試標題;S.content=測試內容;S.payload=test;end'; $template = new IGtTransmissionTemplate();//使用透傳消息模板 $template->set_appId(APPID);//應用appid $template->set_appkey(APPKEY);//應用appkey $template->set_transmissionType(2);//透傳消息類型 $template->set_transmissionContent($payload);//消息內容 $notify = new IGtNotify(); $notify->set_title('測試標題'); $notify->set_content('測試內容'); $notify->set_intent($intent); $notify->set_type(NotifyInfo_type::_intent); $template->set3rdNotifyInfo($notify);
UniPush推送服務已經封裝好iOS&Android平臺的原生集成工做,開發者只須要調用JS代碼處理推送消息的業務邏輯:
Android平臺
APP在線(個推推送通道可用)
推送通知和透傳消息都使用個推的推送通道下發推送消息。
APP離線(個推推送通道不可用)
推送通知,使用個推離線推送通道,離線消息會存儲在消息離線庫,離線時間內APP在線後下發推送消息。
透傳消息,若是符合廠商推送的廠商手機(配置了手機廠商推送參數而且在對應廠商的手機上),則使用廠商推送通道下發推送消息;不然使用個推的離線推送通道,離線消息會存儲在消息離線庫,離線時間內APP在線後下發推送消息。
iOS平臺
推送通知,不支持。
透傳消息,設置APN參數則經過蘋果的APNS通道下發推送消息,沒有設置APN參數則使用個推的推送通道下發。
在華爲手機上必須安裝「華爲移動服務」才能使用華爲的廠商推送通道,首先確保手機上已經安裝「華爲移動服務」應用。
若是在華爲手機應用退出後沒法接收到推送消息,可嘗試如下操做:
若是應用在線能夠接收到推送消息,離線時使用廠商通道沒法接收到推送消息,可參考多廠商推送接入流程及注意事項文檔(Android)
最後也能夠諮詢個推客服,企業QQ:3007288187,或者在ask中@getui_johny