個推推送模板詳解


背景
不少APP開發者在使用個推推送模板的時候疑問比較多,經常存在誤用推送模板的情況。因此,我們寫下這篇個推推送模板教學普及貼,來幫助大家根據你所希望實現的效果來選擇適宜的模板。

推送樣式
個推提供了不同的推送樣式,比如系統樣式、展開式通知樣式。
ps. setLogo的圖片需要在客戶端開發時嵌入(main-res),否則展示不了;
pps. setLogo 和 setLogoUrl 可以二選一,如果都設置了 setLogoUrl 優先級比setLogo高,但是小米、華為有些機型並不支持,所以慎用;
ppps. small logo圖片是沒有服務端接口可以修改的,直接拿的客戶端內置的圖片展示,默認值是push_small.png,很多手機(比如小米)改過展示效果的,這部分的小圖標不一定能顯示出來;

ppps. channel設置完后,就不能再修改它的channelLevel了,除非新建一個新的channel,這是安卓原生的限制;

系統樣式,展開式通知樣式具體代碼如下:
//系統樣式
public static AbstractNotifyStyle getStyle0() {
Style0 style = new Style0();
style.setTitle("這是你想要的標題");
style.setText("這是你想要的內容");
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() {
    Style6 style = 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、1、2、3、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的系統通道通知並展示消息。可以用的模板是TransmissionTemplate。它可以用setAPNInfo(Payload apn)法來設置具體參數。
里面的參數基本上按照iOS官網的字段來進行命名,應該會比較容易上手。這里附上iOS官網文檔鏈接。
個推iOS推送參考代碼如下:
private static APNPayload getAPNPayload() {
APNPayload payload = 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() {
    VoIPPayload payload = new VoIPPayload();
    JSONObject jo = new JSONObject();
    jo.put("key1", "value1");
    payload.setVoIPPayload(jo.toString());
    return payload;
}

總結
通過以上我的介紹,各位應該會對想要達到什么推送效果,用哪種個推的推送模板,會更加清楚。目前個推已經在持續優化推送模板的多樣性和其他功能中,近期會推出基於Restful的v2接口,更加符合開發者的使用習慣,敬請期待。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM