最近公司老闆又讓我們去寫推送,
希望使用者能夠實時收到各種推送通知,比如新的訊息、緊急通知,甚至是應用內通話的提醒。
這兩天正好搞完了,所以寫個博文記錄一下中間的知識點,希望方便後來的同學可以直接用上。
📦 模組簡介
這次的主角是 pushCommon 模組,這個模組提供了非常方便的推送服務公共資訊。
pushCommon 模組是鴻蒙系統中的推送服務模組之一,提供了豐富的功能,包括繫結賬號型別、場景化訊息資料、擴充套件通知訊息、點選事件替換資料以及應用內通話訊息等。簡單來說,這個模組讓你可以靈活地實現各種推送訊息需求,從簡單的通知到複雜的應用內互動都能輕鬆應對。它幫助開發者更高效地整合推送服務,提升使用者體驗。
🛠️ 開發環境要求
pushCommon 模組從鴻蒙 4.0.0 開始支援,開發者可以透過 import { pushCommon } from '@kit.PushKit'; 匯入模組來使用它的功能。
需要注意的是,它只能在 Stage 模型下使用,並且需要具備 SystemCapability.Push.PushService 系統能力才能正常執行。只有滿足這些條件,模組的所有功能才能被正常呼叫和使用。
🚀 繫結賬號型別 (AppProfileType)
在鴻蒙推送服務中,繫結賬號的型別非常重要,因為它決定了推送的訊息可以繫結到哪個賬號型別上。主要有兩種型別:
- 華為賬號 (PROFILE_TYPE_OS_DISTRIBUTED_ACCOUNT):用於繫結使用者的華為賬號,透過繫結華為賬號,你可以讓使用者透過同一個賬號在多個裝置上接收推送訊息,確保跨裝置體驗一致。
- 應用賬號 (PROFILE_TYPE_APPLICATION_ACCOUNT):用於繫結應用內自定義的賬號,這通常適用於那些有自己賬號系統的應用。透過繫結應用賬號,使用者可以接收到屬於他們的個性化訊息,提升整體使用體驗。
例如,如果你的應用涉及使用者的個人賬號系統,就需要使用應用賬號型別,以便讓使用者接收到屬於他們的個性化訊息,這樣能夠顯著提高使用者對應用的依賴性和參與度。
📧 場景化訊息資料 (PushPayload)
應用可以透過 receiveMessage() 獲取場景化訊息資料,比如聊天訊息、應用後臺操作通知等。
PushPayload 提供了多種場景下的推送訊息支援,以下是一些常見的場景:
- IM 訊息:假設你的應用是一款即時通訊工具,當使用者收到新訊息時,可以使用 PushPayload 獲取推送資料。
{
"data": "extraData",
"header": {
"token": "MA**"
},
"messageAction": 0,
"notification": {
"bigBody": "bigBodyXX",
"bigTitle": "bigTitleXX",
"body": "bodyXX",
"image": "https://**/image**.png",
"title": "titleXX"
}
}
上面程式碼裡面的 notification 包含了完整的通知資料,比如標題、內容、圖片等,這些資訊將直接用於在裝置上展示通知。開發者可以透過這些欄位自定義推送內容,使其更符合使用者需求。
- VoIP 通話:如果你需要應用內通話提醒(類似微信語音通話功能),可以透過 PushPayload 獲取通話推送資料
{
"data": "extraData",
"header": {
"token": "MA**"
}
}
上面這種資料通常比較簡單,只需提供通話的必要資訊即可。這種設計也能保證訊息處理的簡潔和快速響應。
🔔 擴充套件通知訊息資料 (RemoteNotificationInfo)
繼承了 PushPayload,用於擴充套件通知功能。透過這個介面,你可以給使用者推送更詳細的資訊,並且支援在 Stage 模型中執行各種場景化操作。舉個例子,如果你需要向使用者推送更豐富的通知資料(例如需要顯示影像、大量文字等),這個擴充套件通知介面可以滿足這些需求。
使用 RemoteNotificationInfo 可以進一步定製化通知內容,幫助使用者更加直觀地獲取關鍵資訊。這個介面非常適合需要推送重要資訊的場景,比如活動促銷、緊急提醒等。
📝 擴充套件通知替換內容 (RemoteNotificationContent)
有時候,預設的通知內容不能滿足需求,比如你想給特定使用者展示個性化的標題和內容。這時可以使用 RemoteNotificationContent 替換通知內容,甚至可以在通知中疊加小圖示,豐富展示效果,吸引使用者注意。
- title:設定通知的標題。透過個性化標題,讓使用者對通知產生興趣,增加開啟率。
- text:設定通知的內容,可以傳達詳細的資訊。
- overlayIcon:疊加圖示(例如顯示未讀訊息的小紅點)。這個圖示可以讓使用者一眼就看到應用的動態資訊,提高點選的可能性。
當然啦,如果你有需要,還可以自定義角標數量 ( badgeNumber),甚至可以同時返回多個角標數量資訊,來展示更多的通知詳情。
🖱️ 點選事件替換資料 (RemoteWantAgent)
當使用者點選通知時,我們希望他們能直接跳轉到相關內容上,從而提升使用者體驗。
RemoteWantAgent 允許我們自定義點選行為,可以替換要跳轉的資料。例如,可以指定要開啟的頁面名稱 ( abilityName ),也可以傳遞額外的引數 ( parameters),這讓應用內的跳轉變得更加靈活。
舉個例子,如果使用者點選一條活動促銷通知,RemoteWantAgent 可以直接將他們帶到活動詳情頁,提升操作的流暢性。這種靈活的跳轉機制使得通知功能不僅僅是傳達資訊,更能引導使用者深入互動。
📞 應用內通話訊息 (VoIPInfo)
如果你的應用有內建的 VoIP(網路電話)功能,那麼 VoIPInfo 就是為此專門設計的。
它繼承了 PushPayload,包含了通話相關的關鍵資訊,比如唯一的通話識別符號 ( callId )、通話型別 ( type ) 和資料 ( data )。
使用者接到 VoIP 通話請求時,可以透過這些資料將通話資訊推送給使用者,從而實現類似微信、釘釘的語音/視訊通話功能。這樣使用者可以快速響應,接聽或拒絕通話,提高了應用內交流的效率。
✨ 一個小的程式碼示例:整合推送服務
為了幫助大家更好地理解,來整一個簡單的程式碼示例,看看如何將推送服務整合到鴻蒙應用中。
首先呢,咱先匯入模組:
import { pushCommon } from '@kit.PushKit';
然後,建立一個推送場景化訊息的處理方法:
function handlePushMessage(message: pushCommon.PushPayload) {
if (message.type === 'IM') {
console.log(`📩 收到即時訊息: ${message.data}`);
} else if (message.type === 'VoIP') {
console.log(`📞 收到通話請求: ${message.data}`);
} else {
console.log(`🔔 收到其他型別的通知: ${message.type}`);
}
}
上面程式碼中呢,我們根據訊息型別來區分處理邏輯,IM 處理即時訊息,VoIP 處理通話請求,其他型別則統一處理。
透過這種方式,可以確保所有推送訊息都能及時且正確地進行處理。
此外,我們還可以對訊息的不同型別進行進一步處理,比如在收到訊息後顯示特定的 UI 提示,或者觸發應用內的某些功能。這些定製化的處理邏輯可以極大提升使用者的使用體驗。
🏁 最後小總結介個
pushCommon 模組為鴻蒙應用提供了強大的推送服務支援,無論是訊息推送、應用內通話,還是複雜的點選事件處理,它都能輕鬆應對。總之又完成了老闆的一個需求,希望大家不踩坑~~~~