用户通知服务
简介
- 将应用产生的通知直接在客户端本地推送给用户,本地通知根据通知类型及发布场景会产生对应的铃声、震动、横幅、锁屏、息屏、通知栏提醒和显示。
能力
- 文本通知
- 纯文本通知( 短文本类型(单行文本), 长文本类型(多行文本) )
- 图文通知
- 进度条通知
- 特殊的通知( 角标 )
- 过程
- 当前用用需要获取用户授权, 才能发送通知
- 授权成功才可以正常发送通知
- 给了我们几个 API
=> 查看是否有授权的 API, isNotificationEnabled()
=> 发送通知的方法 requestEnableNotification()
-> 向用户请求发送通知, 第一次请求的时候会弹窗
做消息通知之前首先要了解一下通知类型和通道类型(通知方式:app小圆点、状态栏图标、横幅、提示音)
1.通知类型
- 实际上就是设置通知卡片的类型
- 设置手机下拉任务栏界面,通知卡片的样式和内容会有所不同
ContentType | 值 | 说明 |
---|
NOTIFICATION_CONTENT_BASIC_TEXT | 0 | 普通类型通知 |
NOTIFICATION_CONTENT_LONG_TEXT | 1 | 长文本类型通知 |
NOTIFICATION_CONTENT_PICTURE | 2 | 图片类型通知 |
NOTIFICATION_CONTENT_CONVERSATION | 3 | 社交类型通知。预留能力,暂不支持 |
NOTIFICATION_CONTENT_MULTILINE | 4 | 多行文本 |
NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW | 5 | 实况窗类型通知。不支持三方应用直接创建该类型通知,可以由系统代理创建系统实况窗类型通知后,三方应用发布同ID的通知来更新指定内容。 |
NOTIFICATION_CONTENT_LIVE_VIEW | 6 | 普通实况窗类型通知。只支持系统应用 |
2.通道类型(通知方式:app小圆点、状态栏图标、横幅、提示音)
SlotType | SlotTypeVal | SlotType说明 | SlotLevel |
---|
UNKNOWN_TYPE | 0 | 未知类型 | LEVEL_MIN |
SOCIAL_COMMUNICATION* | 1 | 社交通信 | LEVEL_HIGH |
SERVICE_INFORMATION* | 2 | 服务提醒 | LEVEL_DEFAULT |
CONTENT_INFORMATION* | 3 | 内容资讯 | LEVEL_MIN |
LIVE_VIEW | 4 | 实况窗,不支持三方应用直接创建该渠道类型通知,可以由系统代理创建后,三方应用发布同ID的通知来更新指定内容。 | LEVEL_DEFAULT |
CUSTOMER_SERVICE | 5 | 客服消息。该类型用于用户与商家之间的客服消息,需由用户主动发起。 | LEVEL_LOW |
OTHER_TYPES* | 0xFFFF | 其他 | LEVEL_MIN |
slotLevel:通知优先级,优先级越高
SlotLevel | SlotLevelVal | SlotLevel说明 |
---|
LEVEL_NONE | 0 | 表示关闭通知功能 |
LEVEL_MIN | 1 | 1.状态栏中不显示通知图标 2.没有横幅 3.没有提示音 |
LEVEL_LOW | 2 | 1.状态栏中显示通知图标 2.没有横幅 3.没有提示音 |
LEVEL_DEFAULT | 3 | 1.状态栏中显示通知图标 2.没有横幅 3.有提示音 |
LEVEL_HIGH | 4 | 1.状态栏中显示通知图标 2.有横幅 3.有提示音 |
3.请求通知授权
- 1.通过固定api(notificationManager.isNotificationEnabled)查询是否已授权
- 2.若未授权,通过固定api(notificationManager.requestEnableNotification)请求用户授权
- 3.授权成功后,才能发送通知
import { abilityAccessCtrl, common } from '@kit.AbilityKit';
isEnabled(callback:()=>void){notificationManager.isNotificationEnabled().then((res)=>{console.log('用户授权 => ',JSON.stringify(res));if(!res){notificationManager.requestEnableNotification(this.context).then(()=>{console.log('发送通知1 => ');callback()}).catch(()=>{console.log('不允许发送通知 => ');const temp = abilityAccessCtrl.createAtManager()temp.requestPermissionsFromUser(this.context, ['ohos.permission.NOTIFICATION_CONTROLLER'])})} else {console.log('发送通知2 => ');callback()}}).catch(()=>{console.log('=> 查询失败')})}
4.发送通知–在获取权限的情况下
import { notificationManager } from '@kit.NotificationKit';
const notificationInfo: notificationManager.NotificationRequest = {id: ++this.count,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {text: '通知的内容' + this.count,title: '通知的标题' + this.count,}},notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,groupName: 'Aaa'
}
notificationManager.publish(notificationInfo)
5.进度条通知
sendSchedule(){this.downloadCount += 1const template:notificationManager.NotificationTemplate = {name: 'downloadTemplate', data:{title: '下载内容', fileName: '下载完成', progressValue: this.downloadCount * 10, progressMaxValue: 100, }}const notificationInfo:notificationManager.NotificationRequest = {id:this.count,content:{notificationContentType:notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {text: '正在下载文件',title: '下载文件',}},template,}notificationManager.publish(notificationInfo, (err) => {console.log('wuwuwu => 通知发送成功')})
}
6.点击通知调起ability
- 首先需要创建want对象
- 然后就还是正常发通知的步骤
pullUpAbility() {const wantAgentInfo: wantAgent.WantAgentInfo = {wants: [{bundleName: 'com.example.testnitification',abilityName: 'EntryAbility',parameters: { txt: 'aaasssaa'}}],operationType: wantAgent.OperationType.START_ABILITY,requestCode: 0,wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG]}wantAgent.getWantAgent(wantAgentInfo, (err, data) => {if (err) {console.log('wuwuwu 创建 WantAgent 出错 =>');return}const notificationInfo: notificationManager.NotificationRequest = {id: ++this.count,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT,longText: {title: '长文本title',text: '长文本text',briefText: '长文本briefText',longText: 'longText',expandedTitle: 'expandedTitle'}},notificationSlotType: notificationManager.SlotType.CUSTOMER_SERVICE,wantAgent: data}notificationManager.publish(notificationInfo, () => {console.log('wuwuwu 发送通知 => ');})})
}
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');if (want?.parameters) {console.log('wuwuwu onCreate => ', JSON.stringify(want.parameters));}
}onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {if (want?.parameters) {console.log('wuwuwu onNewWant => ', JSON.stringify(want.parameters));}
}