背景ios
做爲專業的消息推送服務商,個推爲開發者提供了不一樣種類的推送模板,以實現相應的推送功能。推送模板能夠單用,也能夠組合使用。爲幫助APP開發者更快速地找到適合的推送模板,實現所想要的推送效果,咱們寫下這篇教學普及貼,但願能夠幫到你們。瀏覽器
推送樣式網絡
個推提供了不一樣的推送樣式,好比系統樣式、展開式通知樣式。app
ps. setLogo的圖片須要在客戶端開發時嵌入(main-res),不然沒法展現;優化
pps. setLogo 和 setLogoUrl 能夠二選一。若是兩者都設置了,則 setLogoUrl 優先級比setLogo高,可是小米、華爲等有些機型並不支持該功能,所以,開發者要慎選;spa
ppps.small logo圖片沒有能夠修改的服務端接口,展現客戶端內置的圖片,默認值是push_small.png,不少手機(好比小米)改過其展現效果,這部分的小圖標不必定能顯示出來;code
系統樣式,展開式通知樣式具體代碼以下:component
//系統樣式 public static AbstractNotifyStyle getStyle0() { Style0style =new Style0(); style.setTitle("
這是你想要的標題");視頻
style.setText("
這是你想要的內容");blog
style.setLogo("push.png");//
配置通知欄圖標,須要在客戶端開發時嵌入
style.setLogoUrl("");//
配置通知欄網絡圖標
style.setRing(true); //
設置通知是否響鈴
style.setVibrate(true); //
設置通知是否震動
style.setClearable(true); //
設置通知是否可清除
//Android 8.0
以上支持的
style.setChannel("
通知渠道id");
style.setChannelName("
通知渠道名稱");
style.setChannelLevel(3); return style; } //
展開式通知樣式
public static AbstractNotifyStyle getStyle6() { Style6style =new Style6(); style.setTitle("
這是你想要的標題");
style.setText("
這是你想要的內容");
style.setLogo("push.png"); //
配置通知欄圖標,須要在客戶端開發時嵌入
style.setLogoUrl(""); //
配置通知欄網絡圖標
//
兩種方式選一種
style.setBigStyle1("bigImageUrl"); //
設置大圖+文本樣式
//style.setBigStyle2("bigText"); //
設置長文本+文本樣式
style.setRing(true); style.setVibrate(true); style.setClearable(true); style.setChannel("
通知渠道id");
style.setChannelName("
通知渠道名稱");
style.setChannelLevel(3); return style; }
效果圖
以小米8手機 Android 9版本爲例,推送效果以下(爲了脫敏,直接用個推demo自帶的圖標)
上述代碼中提到了安卓8.0系統中開始支持的通知渠道,具體的字段含義解釋以下。
setChannel表示通知渠道id,是渠道的惟一標識,其默認值爲「Default」 ;setChannelName表示通知渠道名稱,用戶可在手機「設置」中查看,其默認值也爲「Default」。 setChannelName長度建議設置在40Byte之內,超出會被安卓8.0系統自動縮減。 setChannelLevel表示設置通知渠道的重要性,其默認值爲3。具體操做過程當中值有五種可供選擇:0、一、二、三、4;設置以後不能修改,展現形式以下:
0:無聲音,無震動,不顯示。
1:無聲音,無震動,鎖屏不顯示,通知欄中內容被摺疊顯示,導航欄無logo。
2:無聲音,無震動,鎖屏和通知欄都予以顯示,通知不喚醒屏幕。
3:有聲音,有震動,鎖屏和通知欄中都予以顯示,通知喚醒屏幕。
4:有聲音,有震動,亮屏下通知懸浮展現,鎖屏通知以默認形式展現且喚醒屏幕。
ppps. channel設置完後,就不能再對channelLevel進行修改,只能新建一個新的channel。這是安卓原生的限制;
推送模板
到此,你們應該已經瞭解了想要推送的展現效果,可是須要什麼樣的模板來實現具體的通知效果呢?各位請繼續往下看。
通知 & 啓動應用
採用下述代碼用戶能夠在通知欄看到一條含圖標、標題等的通知,當他點擊後能夠激活應用,到達應用首頁。
NotificationTemplate
template = new NotificationTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); //
設置展現樣式,具體見推送樣式部分
通知 &啓動應用 & 透傳
這種方式在前一種的基礎上,加了透傳(這部份內容用戶是看不到的)。經過透傳能夠達到不一樣的效果,好比更新用戶信息。
NotificationTemplate
template = new NotificationTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); template.setTransmissionType(1); //
透傳消息設置;1:當即啓動APP;2:客戶端收到消息後須要自行處理
template.setTransmissionContent("
透傳內容");
通知 & 打開網頁
下述代碼用戶能夠在通知欄看到一條含圖標、標題等的通知。當他點擊通知、啓動手機瀏覽器,即可以打開該通知所設置好的頁面。
LinkTemplate
template = new LinkTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); template.setUrl("http://www.baidu.com"); //
設置打開的網址地址
通知 & 啓動應用打開intent
這是咱們最多見的方方式:點擊通知,打開APP內指定的頁面。
StartActivityTemplate
template = new StartActivityTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); String intent = "intent:#Intent;component=com.yourpackage/.NewsActivity;end";//
這部分寫法不清楚的,能夠諮詢安卓客戶端的童鞋
template.setIntent(intent); //
最大長度限制爲1000,很重要
透傳
若是你們有一些個性化需求,好比想要本身定義所要實現的展現效果,那麼能夠用純透傳的方式。
TransmissionTemplate
template = new TransmissionTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setTransmissionType(2);//
//
透傳消息設置;1:當即啓動APP;2:客戶端收到消息後須要自行處理,若是設置爲1,對用戶使用不友好,不推薦使用
template.setTransmissionContent("
透傳內容");
消息撤回
這個功能很實用,當App運營者不當心發送了不當的消息,能夠立馬撤回。
RevokeTemplate
template = new RevokeTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setOldTaskId(taskId); //
指定須要撤回消息對應的taskId
template.setForce(false); //
客戶端沒有找到對應的taskid,是否把對應appid下全部的通知都撤回
消息覆蓋
好比足球比賽實時比分播報,用戶只想知道最新比分,咱們就能夠選擇「消息覆蓋」方式的推送模板。
前面代碼中提到的StartActivityTemplate 、LinkTemplate 、NotificationTemplate都有一個方法:setNotifyid(Integer notifyid)。在消息推送的時候設置notifyid,當有覆蓋需求時,使用相同的notifyid發一條新的消息,客戶端sdk會根據notifyid對應的前一條消息進行覆蓋。
iOS推送
你可能發現了前面所講的都是基於安卓推送的操做,iOS的操做相對會比較特殊。邏輯是當APP在線時,個推消息推送會直接把透傳內容發送到手機上,須要客戶端解析後予以展現;當APP離線時,推送會採用APNs通道,由iPhone的系統通道通知並展現消息。iOS推送能夠採用TransmissionTemplate模板,根據setAPNInfo(Payload apn)法來設置具體參數。
具體參數基本上按照iOS官網的字段來進行命名,應該會比較容易上手。這裏附上iOS官網文檔連接。
個推iOS推送參考代碼以下:
private static APNPayloadgetAPNPayload() {
APNPayloadpayload =new APNPayload(); //
在已有數字基礎上加1顯示,設置爲-1時,在已有數字上減1顯示,設置爲數字時,顯示指定數字
payload.setAutoBadge("+1"); payload.setContentAvailable(1); //ios 12.0
以上可使用 Dictionary 類型的 sound
payload.setSound("default"); payload.setCategory("$
由客戶端定義種類");
payload.addCustomMsg("
由客戶自定義消息key", "由客戶自定義消息value");
payload.setAlertMsg(getDictionaryAlertMsg()); //
字典模式
//
設置語音播報類型,int類型,0.不可用 1.播放body 2.播放自定義文本
payload.setVoicePlayType(2); //
設置語音播報內容,String類型,非必須參數,用戶自定義播放內容,僅在voicePlayMessage=2時生效
//
注:當"定義類型"=2, "定義內容"爲空時則忽略不播放
payload.setVoicePlayMessage("
定義內容");
//
添加多媒體資源,能夠是圖片、音頻、視頻,最多能夠添加3條多媒體
payload.addMultiMedia(new MultiMedia().setResType(MultiMedia.MediaType.pic) .setResUrl("
資源文件地址")
.setOnlyWifi(true));//
設置是否在WIFI下才展現多媒體消息,若是設置true但未使用WIFI時會展現成普統統知
return payload; }
private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg() {
APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg(); alertMsg.setBody("body1"); alertMsg.setActionLocKey("
顯示關閉和查看兩個按鈕的消息");
alertMsg.setLocKey("loc-key1"); alertMsg.addLocArg("loc-ary1"); alertMsg.setLaunchImage("
調用已經在應用程序中綁定的圖形文件名");
alertMsg.setTitle("
通知標題");
alertMsg.setTitleLocKey("
自定義通知標題");
alertMsg.addTitleLocArg("
自定義通知標題組");
return alertMsg; } /** *
須要使用iOS語音傳輸,請使用VoIPPayload代替APNPayload
*
須要相關證書纔可使用此功能
*/ private static VoIPPayload getVoIPPayload() { VoIPPayloadpayload =new VoIPPayload(); JSONObjectjo =new JSONObject(); jo.put("key1", "value1"); payload.setVoIPPayload(jo.toString()); return payload; }
總結
個推推送模板提供了系統樣式和展開通知樣式,可是開發者請務必要注意:Android和iOS的代碼推送方式是不一樣的。推送iOS消息,只能用TransmissionTemplate透傳模板;推送Android消息,可使用TransmissionTemplate透傳模板和NotificationTemplate、LinkTemplate、StartActivityTemplate、RevokeTemplate通知類模板。爲提供更優質的推送服務,個推持續優化產品功能,豐富推送模板,同時將於近期推出基於Restful的v2接口,以更加符合開發者的使用習慣,敬請期待。