在談消息推送樣式以前,先來講說消息推送。java
什麼是消息推送?
簡而言之,就是你的app主動向用戶推送消息。在競爭日益激烈的應用市場,靈活運用消息推送,對用戶增加、促活和留存有很大的促進做用。android
消息推送在不一樣推送類型中有不一樣的價值體現。git
產品功能類推送github
- 系統消息通知:社交屬性的app中的關注、贊評轉互動消息推送;購物app中物流信息通知等……
- 資訊活動通知:新聞媒體app的時效性訊息推送、遊戲和知識等app的節假日活動、福利促銷信息推送等……
用戶運營類推送數組
- 沉默用戶喚醒:用主動觸及用戶的消息推送方式喚醒沉默用戶。
- 提升用戶活躍:結合福利活動等信息的推送,提升用戶的活躍。
消息推送預期效果的實現,須要推送內容、推送樣式以及時間節奏的完美結合。今天咱們將詳解華爲推送服務所提供的8種消息推送樣式及其實現方法,爲你的應用用戶增加和活躍助力。服務器
華爲推送服務(Push Kit)是華爲提供的消息推送平臺,創建了從雲端到終端的消息推送通道。經過集成推送服務能夠實時推送消息到用戶終端,構築良好的用戶關係,提高用戶的感知度和活躍度。併發
Push Kit當前支持多種文本樣式,Inbox樣式,按鈕樣式以及自定義圖標等樣式。你可定義極具個性化的消息來吸引用戶。本文經過簡單的代碼和效果展現,幫助你快速瞭解並上手華爲Push消息。app
消息樣式介紹
首先,藉助官方開發文檔給出的示例,介紹通知欄消息的結構。ide
從上圖能夠看出,通知欄消息從上到下依次包含消息小圖標、應用名稱、消息摘要、消息到達時間、標題、內容等部分。這其中,除了應用名稱,其餘要素共同構成了通知欄消息自定義樣式。測試
做爲各類樣式的對比,首先給你們展現最基本的通知欄消息樣式:
{ "validate_only": false, "message": { "android": { "notification": { "body": "簡要描述消息的內容,自由發揮啦", "click_action": { "type": 3 }, "title": "這裏是消息標題" } }, "token": ["xxx"] } }
說明:一條通知欄消息,至少須要包含以上字段,不然沒法發送。
下面,分別給你們講解各個樣式自定義的方式。
1)自定義消息小圖標
Push Kit提供了兩種設置通知欄消息小圖標的方法:
- 經過服務端API發送下行消息攜帶「icon」字段,圖標文件必須存放在應用的/res/raw路徑下,例如「res/raw/ic_launcher」,對應應用本地的「/res/raw/ic_launcher.xxx」文件。
{ "android": { "notification": { "body": "沒錯,消息小圖標能夠自定義哦", "click_action": { "type": 3 }, "icon": "/raw/custom_notification_icon", "title": "快看左上角小圖標" } }, "token": ["xxx"] }
- 經過應用的「AndroidManifest.xml」文件添加meta-data元數據來實現,參考代碼以下:
<meta-data android:name="com.huawei.messaging.default_notification_icon" android:resource="@drawable/ic_push_notification" />
其中,meta-data元數據「name」不可改變,「resource」指定的資源圖標由您指定,須要在應用的「res/drawable」目錄下。
分析:對比兩種方法,方法1更加靈活,只須要提早把小圖標預置在客戶端,服務端就能夠根據須要使用不一樣的小圖標。
2)自定義消息摘要
消息摘要展現在應用名右側,用於簡要描述消息的內容。經過服務端API中的「notify_summary」字段進行設置。
{ "validate_only": false, "message": { "android": { "notification": { "body": "簡要描述消息的內容,自由發揮啦", "click_action": { "type": 3 }, "notify_summary": "這裏是摘要部分……", "title": "這裏是消息標題", } }, "token": ["xxx"] } }
3)自定義消息到達時間(僅用於展現)
華爲Push服務器一旦接收到開發者的消息推送請求,就會當即處理併發送給用戶。所以,消息實際到達用戶手機的時間是沒法自定義的。可是,服務端API提供了用於通知欄消息展現、排序的自定義時間字段「when」。開發者一旦指定此參數,用戶通知欄的消息將根據此時間進行展現和排序。
上圖的測試中,兩條消息都是在10點左右發送並收到的,且上方消息發送時間早於下方消息。若是沒有設置「when」字段,圖片消息應該展現在下面。可是因爲下方消息發送時使用「when」字段指定展現時間爲"2021-04-29T01:26:23.045123456Z"。所以,實際在用戶手機上排序展現時,下方消息展現了「when」字段設置的時間。
{ "validate_only": false, "message": { "android": { "notification": { "body": "簡要描述消息的內容,自由發揮啦", "click_action": { "type": 3 }, "title": "這裏是消息標題", "when": "2021-04-29T01:26:23.045123456Z" } }, "token": ["xxx"] } }
說明:此參數使用UTC時間,且必須小於當前時間。
4)自定義消息按鈕
通知欄消息支持添加多個按鈕,點擊按鈕能夠觸發相應的動做。
{ "validate_only": false, "message": { "android": { "notification": { "body": "推送消息底部可添加多個按鈕,點擊按鈕能夠出發相應的動做", "buttons": [{ "action_type": 0, "name": "瞭解更多" }, { "action_type": 3, "name": "任性忽視" }], "click_action": { "type": 3 }, "title": "震驚!這個推送樣式你必須瞭解" } }, "token": ["xxx"] } }
說明:按鈕動做類型:0:打開應用首頁,1:打開應用自定義頁面,2:打開指定的網頁,3:清除通知,4:華爲分享功能;
「name」字段的值若是爲英文,通知消息展現時按鈕名字會以全大寫字母展現。
上述消息,改變的主要是局部樣式,不涉及消息的title和body字段。這些樣式能夠隨意搭配使用,相互之間不影響。
下面介紹的3種樣式,因爲涉及title和body字段,所以相互之間存在一些影響,調用服務端API時不建議同時使用。
5)大文本樣式
早期版本推送服務,默認樣式下僅支持單行文本,單行文本支持的字數太少,會有表達不全的缺陷。大文本樣式支持標題單行,內容文字多行(當前EMUI 9系統限制最多顯示12行中文或者14行英文,EMUI 10&11系統限制最多顯示11行中文或者13行英文)。大文本展開後效果以下:
{ "validate_only": false, "message": { "android": { "notification": { "big_body": "大文本樣式支持標題單行,內容文字多行。當前EMUI 9系統限制最多顯示12行中文或者14行英文,EMUI 10&11系統限制最多顯示11行中文或者13行英文。", "big_title": "這裏是大文本消息標題", "body": "簡要描述消息的內容,自由發揮啦", "click_action": { "type": 3 }, "style":1, "title": "這裏是消息標題" } }, "token": ["xxx"] } }
說明
EMUI 9:大文本展開以前顯示的標題與內容取自「title」與「body」字段,非「big_title」與「big_body」字段的內容。
EMUI 10:大文本展開以前顯示的標題取自「title」字段,內容取自「big_body」字段。
6)Inbox樣式
此樣式也能夠展現多行文本,可是不一樣於大文本樣式,Inbox樣式將每行內容都看成獨立的單行文本去展現。文本內容最多可展現5行,每行內容展現不了時後邊自動添加「...」。
{ "validate_only": false, "message": { "android": { "notification": { "body": "簡要描述消息的內容,自由發揮啦", "click_action": { "type": 3 }, "inbox_content": ["1.首先你須要找到一頭大象","2.好吃好喝把大象騙到冰箱旁","3.打開冰箱門","4.把大象塞進冰箱","5.關上冰箱門"], "style": 3, "title": "這裏是消息標題" } }, "token": ["xxx"] } }
總結:
樣式 |
|
title取值字段 |
body取值字段 |
0:默認樣式 |
展開前 |
title |
big_body –>body |
|
展開後 |
big_title->title |
big_body –>body |
1:大文本樣式 |
展開前 |
title |
big_body |
|
展開後 |
big_title |
big_body |
3:Inbox樣式 |
展開前 |
title |
body |
|
展開後 |
big_title->title |
inbox_content |
7)消息本地化展現
通知消息本地化又能夠理解爲國際化多語言展現,指的是通知消息能夠根據手機本地語言變化展現對應語言的標題和內容,從而覆蓋本消息中普通的標題和內容。
Push Kit提供了兩種消息本地化展現的方法:
- 徹底經過服務端提供的REST API接口實現;
{ "validate_only": false, "message": { "android": { "notification": { "body": "bbb", "body_loc_args": ["Jack"], "body_loc_key": "body_key", "click_action": { "type": 3 }, "multi_lang_key": { "title_key": { "en": "New Friend Request From %s", "zh": "來自%s的好友請求" }, "body_key": { "en": "My name is %s.", "zh": "我叫%s。" } }, "title": "ttt", "title_loc_args": ["Shanghai"], "title_loc_key": "title_key" } }, "token": ["xxx"] } }
說明:
一、「title_loc_key」、「body_loc_key」字段分別對應「multi_lang_key」中相關字段的名稱;
二、「title_loc_args」、「body_loc_args」字段的值都是一個可變的字符串數組,用於填充對應字段的值中的佔位符%s;
三、「multi_lang_key」字段當前最多支持配置三種語言。
- 服務端REST API與應用本地的字符串資源文件「strings.xml」配合實現。
{ "validate_only": false, "message": { "android": { "notification": { "title": "ttt", "body": "bbb", "body_loc_args": ["Jack", "Shanghai"], "body_loc_key": "body_key", "click_action": { "type": 3 }, "title_loc_key": "title_key" } }, "token": ["xxx"] } }
在Android資源文件「/res/values/strings.xml」中定義字符串資源。
支持佔位符,%後面是佔位符的位置,從1開始,$後面是填充數據的類型。
支持多語言,好比「/res/values-en/strings.xml」進行英語本地化適配。
<string name="title_key">New Friend Request</string> <string name="body_key">My name is %1$s, I am from %2$s.</string>
在App中添加代碼,動態獲取可變字符串,並對資源節點進行字符串格式化,填充內容到佔位符中。
public class DemoHmsMessageService extends HmsMessageService { @Override public void onMessageReceived(RemoteMessage message) { String[] bodyArrays = message.getNotification().getBodyLocalizationArgs(); // 獲取內容並進行格式化 String key = getResources().getString(R.string.body_key); String body = String.format(key, bodyArrays[0], bodyArrays[1]); Log.i(TAG, body); } }
分析:對比2種方法,方法1使用靈活,不須要改造客戶端代碼。可是方法2能夠同時支持更多的語言,適用於全球化程度更高的應用。
>>訪問華爲推送服務官網,瞭解更多相關內容
>>獲取華爲推送服務開發指導文檔
>>華爲HMS Core官方論壇
>>華爲推送服務開源倉庫地址:GitHub、Gitee
點擊右上角頭像右方的關注,第一時間瞭解華爲移動服務最新技術~