背景
由于鴻蒙的元能力與窗口組件新增了安全機制(應用退出后臺后,不允許執行 Ability 之間的拉起),因此當前 App 離線狀態下點擊通知欄之后,無法直接跳轉到應用內頁面。具體組件啟動規則,參考鴻蒙組件啟動規則。
此次更新刪除了 mPaaS 中間層,修復了上述問題。
客戶端更新與接入
鴻蒙客戶端基線升級之后,用戶只需直接配置需要跳轉的目標頁面即可。例如,需要點擊通知欄之后跳轉到 PushLandingAbility
頁面,需在 module.json5
文件中進行如下配置。
{
"name": "PushLandingAbility",
"srcEntry": "./ets/pushability/PushLandingAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:LandingAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"actions": [""],
"uris": [
{
"scheme": "jump",
"host": "com.mpaas.harmony.push",
"path": "landing"
}
]
}
]
},
mPaaS 通過消息中的 URI 匹配具體的頁面,actions 需要設置為空(不能缺少該字段)。
在跳轉的目標頁面中,用戶可以使用 mPaaS 提供的工具類 PushMsgHandler 解析消息通知中包含的數據(使用時,需要確保服務端已經升級),具體代碼參考如下:
import { MPPushMsg,PushMsgHandler,msgOutput } from '@mpaas/push';
export class PushLandingAbility extends UIAbility {
private TAG: string = "PushLandingAbility"
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
super.onCreate(want, launchParam)
let msg: msgOutput | undefined = PushMsgHandler.parsePushMsg(want)
let msg_id: string | undefined = msg?.msg_id
let msg_data: MPPushMsg | undefined = msg?.msg_data
}
......
}
msg_id
對應消息 ID。msg_data
對應具體的消息數據。
另外, 升級后的 SDK 在 NcAbility 內部做了配置頁面的銷毀動作,因此 開發者需要刪除在配置頁面中 onForeground 階段的 this.context.terminateSelf 代碼,配置示例如下:
export default class MpaasBridgeMsgAbility extends MpaasNcAbility {
static tag: string = "MpaasBridgeMsgAbility"
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, MpaasBridgeMsgAbility.tag, "start MpaasBridgeMsgAbility onCreate")
super.onCreate(want, launchParam)
}
onForeground() {
console.log('MpaasBridgeMsgAbility onBackground');
}
}
風險點提示 1:如果升級客戶端組件之后,沒有刪除上述銷毀的代碼,那么跳轉動作會失敗。
風險點提示 2:升級客戶端組件之后,如果沒有升級服務端,保持現有的消息解析方式不變,不要使用 PushMsgHandler 解析消息,否則會解析失敗。
服務端更新內容
服務端通過 pushVersion 字段的值(在客戶端調用初始化上報接口時會上報該字段)來判斷和適配不同版本的鴻蒙推送 SDK,升級前的 pushVersion 字段值為 2.5.0
,升級后的 pushVersion 字段值為 3.0.0
。
針對 升級前的 SDK,服務端發送的推送消息結構體如下:
{
"pushOptions": {
"testMessage": true,
"biTag": "0#11#1.0.0#c_0_0_8314646940c9f7ceb2e0Grm&49bd2fa97769abdf",
"collapseKey": -1,
"ttl": 180
},
"payload": {
"notification": {
"badge": {
"addNum": 1
},
"notifyId": 1568946632,
"category": "MARKETING",
"title": "推送測試-noUrl000",
"body": "推送測試-noUrl000",
"clickAction": {
"actionType": 1,
"data": {
"com_harmony_push": {
"bData": "{\"harmonyos_badge_add_num\":\"1\",\"pushStyle\":0,\"silent\":false,\"notifyType\":\"notify\",\"action\":\"0\",\"id\":\"console_1709535017366\",\"params\":{\"ALIMpsChannel\":\"HARMONYOS\"},\"url\":\"https://www.baidu.com\",\"test_msg\":\"1\"}",
"k": "c_0_0_8314646940c9f7ceb2e0Grm"
}
},
"action": "com.mpaas.harmony.push",
"uri": "mpaasscheme://com.mpaas.harmony.push/longlink"
}
}
},
"target": {
"token": ["MAMzLgNB-HcFV6YAstOIywAAAGQAAAAAAAHmQeccAFJz604RQSgRll3LPikX2SogGoJtfDDs4lG2Vaz5MwV18jA9UsYKH4oNbTarIDVIjY9SzGrm"]
}
}
針對 升級后的 SDK,服務端發送的推送消息結構體如下:
{
"pushOptions": {
"testMessage": true,
"biTag": "0#11#1.0.0#c_0_0_8315cb56301994ccb601Grm&104aca1b4f59abd6",
"collapseKey": -1,
"ttl": 180
},
"payload": {
"notification": {
"badge": {
"addNum": 1
},
"notifyId": 1568946632,
"category": "MARKETING",
"title": "推送測試-noUrl000",
"body": "推送測試-noUrl000",
"clickAction": {
"actionType": 1,
"data": {
"com_harmony_push": {
"bData": "{\"harmonyos_badge_add_num\":\"1\",\"pushStyle\":0,\"silent\":false,\"notifyType\":\"notify\",\"action\":\"1\",\"id\":\"console_1709535017366\",\"params\":{\"ALIMpsChannel\":\"HARMONYOS\"},\"url\":\"jump://com.mpaas.harmony.push/landing\",\"test_msg\":\"1\"}",
"k": "c_0_0_8315cb56301994ccb601Grm"
}
},
"action": "",
"uri": "jump://com.mpaas.harmony.push/landing"
}
}
},
"target": {
"token": ["MAMzLgNB-HcFV6YAstOIywAAAGQAAAAAAAHmQeccAFJz604RQSgRll3LPikX2SogGoJtfDDs4lG2Vaz5MwV18jA9UsYKH4oNbTarIDVIjY9SzGrm"]
}
}
區別
服務端對于升級前的 SDK,URI 傳遞的是一個固定的配置頁面的地址:mpaasscheme://com.mpaas.harmony.push/longlink,客戶端點擊通知欄之后會跳轉到固定的配置頁面(即繼承了 NcAbility 的頁面),然后由該配置頁面去拉起不同的頁面(頁面地址在 bData 里面的 URL 字段)。
服務端對于升級后的 SDK,URI 傳遞的是需要跳轉的頁面的地址:jump://com.mpaas.harmony.push/landing,點擊后由鴻蒙系統直接跳轉。
升級步驟
此次更新涉及到服務端升級與客戶端升級,建議先升級服務端,后升級客戶端。
服務端升級之后,會兼容新舊兩種客戶端版本。
服務端升級版本:1.35.0 及其以上版本
客戶端基線版本:10.2.3.13 及其以上版本基線
鴻蒙基線接入方式可參考文檔:接入 HarmonyOS NEXT
風險點提示:如果先升級客戶端,則 不要刪除原有的配置頁面(繼承 NcAbility 的配置頁面),如果刪除了繼承 NcAbility 的配置頁面,但是沒有升級服務端,那么客戶端將無法處理通知欄的點擊跳轉事件。
升級改動點
此次升級之后,客戶端點擊通知欄之后直接跳轉到消息中包含的 URI 對應的應用內頁面,不經過 NcAbility 頁面中轉,同時提供了數據解析工具,幫助用戶在目標頁面解析消息數據。
風險點提示:鴻蒙 Push Kit 能力暫不支持點擊通知消息直接跳轉到瀏覽器并且打開 HTTP 鏈接,如果服務端推送的消息包含了網頁類型的跳轉地址,升級之后將無法自動打開瀏覽器打開鏈接,需要用戶自行適配此種消息的跳轉。詳情請參考鴻蒙文檔:點擊消息動作。
兼容情況與說明
服務端升級,客戶端不升級
由于升級之后的服務端可以兼容老版本客戶端組件,因此客戶端不升級則維持現有方式。
客戶端升級,服務端不升級
若客戶端升級之后,保持繼承了 NcAbility 的配置頁面存在,那么依然會走原有的跳轉邏輯。