【FAQ】HarmonyOS SDK 闭源开放能力 —Notification Kit
1.问题描述:
notificationFlagStatus如何引入?文档中搜索不到相关内容。
解决方案:
1.notificationFlags是NotificationRequest类中定义的属性,这个属性是“只读”类型,因此在使用时,不支持修改notificationFlags的值。
2.如果想要实现消息有铃声、震动等能力,可以通过SlotType属性来设置通知渠道的类型。 比如社交通信、服务提醒等场景是有铃声、震动等强提醒。 而内容资讯、其他等渠道类型是没有铃声震动等强提醒的,具体可参考下方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/notification-slot-0000001774120666。
2.问题描述:
文档写的ExtensionPayload通知扩展消息,要求notification.category取值为“EXPRESS”。是否可以反过来理解,当notification.category取值为 “EXPRESS” 时,就是ExtensionPayload通知扩展消息?
解决方案:
1.推送push-type=0普通通知,指定category=EXPRESS,终端设备的表现:展示普通通知,这么理解是没有问题的
2.推送push-type=2拓展通知,指定category=EXPRESS,终端设备的表现:展示普通通知+语音播报效果
第二点可以这么理解:
1、应用进程不存在:消息会触发ExtensionAbility组件-继承自RemoteNotificationExtensionAbility(通知扩展Ability),然后开发者自行实现语音播报的能力-然后通过开发者再返回return对象, 就可以通知栏消息和语音播报能力。
2、当应用进程存在:无论应用在前台或者在后台均不弹出通知提醒,可以通过receiveMessage()方法实时获取通知扩展消息数据,
3.问题描述:
如何通过系统通知跳转App,进入某个ts处理通知携带的参数。在module.json5新增extensionAbilities,点击系统通知没有进入指定的ts?
解决方案:
点击通知跳转可以设置WantAgent动作
1、可以参考文档创建WantAgentInfo信息场景一,点击消息拉起UIAbility,首先需要在module.json5配置文件的abilities标签中声明需要跳转的UIAbility。
2、WantAgent的WantAgentInfo信息中,bundleName设置应用包名、abilityName设置为需要跳转的UIAbility即可跳转,也可以通过action字段等方式跳转,详情参考API文档说明。
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/notification-with-wantagent-V5
4.问题描述:
申请后台音频播放长时间任务失败,报错9800006 Notification verification failed. The title or text of the notification cannot be empty,使用官方的demo可以申请成功,但是移植对应的逻辑到项目中失败,如何解决?
解决方案:
后台任务有匹配规则,不能在HOME里添加uris,可以在skills列表数据中另起一个匹配规则,不影响隐式跳转匹配,也不影响后台任务的匹配,例如: ts "skills": [ { "entities": [ "entity.system.home", ], "actions": [ "action.system.home", ] }, { "actions": [ "ohos.want.action.viewData" ], "uris": [ { "scheme": 'amap' } ] } ]
5.问题描述:
怎么打开推送通知权限,若是用户没有开权限,跳转到设置页面打开权限
解决方案:
一、可以通过isNotificationEnabled():Promise
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/notification-enable-V5
二、如果应用首次拒绝了消息通知,应用希望能够引导用户拉起设置应用设置允许通知,用来接收应用内的推送消息;并且在设置完后返回页面可以监听到修改后的状态。可以参考以下案例:
1、通过startability显式拉起设置应用-通知管理界面,配置相应的want信息(不推荐使用隐式拉起的方式)。
2、在进入页面时通过Notification.requestEnableNotification()监听应用请求通知使能
核心代码
为Button绑定拉起事件
Button(this.buttonText).onClick(()=>{
let context = getContext(this) as common.UIAbilityContext;
let want: Want = {
bundleName: 'com.huawei.hmos.settings',//设置应用bundleName
abilityName: 'com.huawei.hmos.settings.MainAbility',//设置应用abilityName
uri: "systemui_notification_settings",//通知管理页面
parameters: {
pushParams: {
bundleName:context.abilityInfo.bundleName//拉起方应用包名
}
};
context.startAbility(want)
}).margin(10)
Text(this.message)
在打开页面时获取通知管理中按钮状态,Notification.requestEnableNotification()请求发送通知的许可,第一次调用会弹窗让用户选择。
onPageShow(): void {
Notification.requestEnableNotification().then(() => {
//已打开通知
this.message = "已允许接收消息推送。"
this.buttonText = "去关闭通知"
console.info("requestEnableNotification success");
}).catch((err:Error) => {
//未打开通知
this.message = "已禁止接收消息推送。"
this.buttonText = "去开启通知"
console.info("requestEnableNotification error");
});
}</boolean>