個推消息推送模板詳解

背景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接口,以更加符合開發者的使用習慣,敬請期待。

相關文章
相關標籤/搜索