背景
由于鸿蒙的元能力与窗口组件新增了安全机制(应用退出后台后,不允许执行 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 的配置页面存在,那么依然会走原有的跳转逻辑。