鸿蒙开发实战:Notification Kit 在美颜相机中的智能通知管理
开发场景需求
在"拍摄美颜相机"应用中,Notification Kit 实现:
智能拍摄提醒:基于场景的适时通知
社交互动通知:点赞/评论实时推送
系统级通知整合:勿扰模式下的优先级管理
//核心实现与代码示例
//场景化拍摄提醒
//定时提醒通知:
typescript
import notification from '@ohos.notification';
// 设置黄金时段拍摄提醒
function setupGoldenHourReminder() {
notification.schedule({
id: 'golden_hour',
content: {
title: '黄金拍摄时刻',
text: '当前日落光线完美,快打开相机!',
image: $r('app.media.sunset_icon')
},
trigger: {
type: 'calendar',
hour: 17,
minute: 30,
repeat: true
},
userParams: {
deepLink: 'beautycam://goldenmode' // 深度链接
}
});
}
// 基于位置的提醒
location.on('enterGeofence', (fence) => {
if (fence.id === 'scenic_spot') {
notification.publish({
title: '网红打卡点',
text: `您已到达${fence.name},试试专属AR滤镜!`,
smallIcon: 'camera_icon'
});
}
});
//天气事件通知:
typescript
weather.on('rainStart', () => {
notification.publish({
title: '雨天拍摄提示',
text: '使用「雨滴特效」滤镜增强氛围感',
actions: [
{
title: '立即尝试',
intent: {
bundleName: 'com.beauty.cam',
abilityName: 'QuickFilterAbility',
parameters: { filter: 'rain_effect' }
}
}
]
});
});
//社交互动通知
//聚合通知处理:
typescript
// 初始化消息管理器
const msgCenter = notification.createNotificationGroup({
id: 'social_updates',
summary: '您有${count}条新互动'
});
// 新点赞处理
social.on('newLike', (like) => {
msgCenter.add({
id: `like_${like.id}`,
title: like.userName + '点赞了你的照片',
text: like.photoTitle,
smallIcon: 'heart_icon'
});
});
// 新评论处理
social.on('newComment', (comment) => {
msgCenter.add({
id: `comment_${comment.id}`,
title: `${comment.userName}: ${comment.previewText}`,
largeIcon: comment.userAvatar,
replyAction: true // 启用快速回复
});
});
//富媒体通知:
typescript
function sendPhotoReplyNotification(reply) {
notification.publish({
style: 'media',
content: {
title: reply.toUser + '回复了你',
text: reply.text,
media: {
image: reply.photoThumbnail,
actions: [
{ icon: 'like', action: 'social.like' },
{ icon: 'reply', action: 'social.reply' }
]
}
}
});
}
//智能勿扰管理
//优先级通道配置:
typescript
// 创建关键通知通道
notification.createChannel({
id: 'shooting_alert',
name: '拍摄提醒',
importance: 'HIGH', // 高优先级
bypassDnd: true, // 绕过勿扰模式
lights: true // 呼吸灯提醒
});
// 创建社交通知通道
notification.createChannel({
id: 'social',
name: '社交互动',
importance: 'DEFAULT',
vibration: [200, 300, 200] // 振动模式
});
用户活动感知:
typescript
// 当用户活跃时增强通知
userActivity.on('cameraOpened', () => {
notification.setInterruptionFilter('ALL'); // 允许所有通知
});
// 夜间静默模式
power.on('sleepMode', (enabled) => {
notification.setChannelImportance(
'social',
enabled ? 'LOW' : 'DEFAULT'
);
});
//关键优化策略
//通知去重
typescript
// 使用相同ID更新通知
let likeCount = 0;
social.on('newLike', () => {
likeCount++;
notification.publish({
id: 'new_likes', // 固定ID实现更新
title: `新点赞(${likeCount})`,
text: '您的作品获得更多喜爱',
badge: likeCount
});
});
//点击行为分析
typescript
// 跟踪通知转化率
notification.on('click', (notice) => {
analytics.log('notification_click', {
type: notice.userParams?.category,
timeToOpen: Date.now() - notice.publishTime
});
});
//多设备同步
typescript
// 同步通知状态
device.on('deviceChanged', (newDevice) => {
notification.syncAcrossDevices({
keep: ['shooting_alert'], // 保留重要通知
clear: ['social'] // 清除已读社交通知
});
});
//权限声明
json
// module.json5配置
"requestPermissions": [
{
"name": "ohos.permission.NOTIFICATION",
"reason": "发送拍摄提醒"
},
{
"name": "ohos.permission.PUBLISH_NOTIFICATION",
"reason": "互动消息通知"
}
]
//版本兼容
typescript
// 兼容旧版通知API
if (notification.apiLevel < 3) {
this.useLegacyNotification();
} else {
this.useNewChannelSystem();
}
//国际化适配
typescript
// 动态加载通知文案
function getLocalizedNotice(key) {
return i18n.t(`notices.${key}`, {
time: formatTime(i18n.locale),
count: unreadCount
});
}
评论