本章节介绍了如何在推送鸿蒙通知时设置角标。
功能描述
阿里云移动推送平台提供针对鸿蒙应用的角标参数,用于在推送通知时设置角标数或者角标累加数,推送后会在鸿蒙手机桌面应用icon上显示角标数。阿里云自有通道和鸿蒙厂商通道均支持。
角标设置
OpenAPI提供两个参数,用于设置角标:
HarmonyBadgeSetNum:角标数,即角标展示的数值。
HarmonyBadgeAddNum:角标累加数,最终角标数会在原有角标数基础上加上此数值展示。当同时设置HarmonyBadgeSetNum和HarmonyBadgeAddNum时,HarmonyBadgeSetNum生效。
推送时按需设置这两个参数,即可实现展示角标的功能。
定制通知时的角标处理
当通知通过阿里云自有通道下发时,可以定制通知。 定制通知是客户端应用自己处理通知的展示,而角标的展示依赖通知的展示设置,所以当定制通知时,客户端需要自己处理角标的展示。
角标数据获取
我们在PushNotification数据中新增了角标字段,定义如下:
/**
* 推送数据
*/
export interface PushNotification extends BasePushData {
// 省略其它字段
/**
* 设置的角标数
*/
badgeSetNum?: number;
/**
* 新增的角标数
*/
badgeAddNum?: number;
}
badgeSetNum:角标数,对应推送的HarmonyBadgeSetNum字段。
badgeAddNum:角标累加数,对应推送的HarmonyBadgeAddNum字段。当推送时同时设置HarmonyBadgeSetNum和HarmonyBadgeAddNum字段时,仅会下发badgeSetNum字段,badgeAddNum字段会忽略。
角标累加数设置
SDK侧,角标累加效果是通过NotificationRequest的badgeNumber字段实现的。所以需要在创建NotificationRequest时,根据badgeAddNum设置badgeNumber字段。
SDK提供辅助方法createNotificationRequest创建NotificationRequest,内部已经处理了badgeNumber字段的设置。示例代码如下:
import {
aliyunPush,
ExtensionNotification,
IPushListener,
PushError,
PushMessage,
PushNotification
} from '@aliyun/push';
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
/**
* 推送回调接口实现,用于接收推送数据
*/
class MyPushListener implements IPushListener {
onReceiveNotification(data: PushNotification | ExtensionNotification): boolean {
// ************* 定制通知 begin *************
aliyunPush.getPushHelper().createNotificationRequest(data).then((request) => {
// createNotificationRequest 方法已经根据data.badgeAddNum设置了badgeNumber字段,不需要单独处理
// 应用根据需要可以调整 request的字段以实现定制效果。
// 发布通知
notificationManager.publish(request).then(() => {
console.debug(`发布定制的通知成功`)
if (data.badgeSetNum !== undefined && data.badgeSetNum >= 0) {
// 定制通知需要自己处理角标。 对于data.badgeSetNum,需要在此处设置
notificationManager.setBadgeNumber(data.badgeSetNum);
}
// 如果要统一逻辑,这里也可以主动调用onShowNotification方法
this.onShowNotification(data);
}).catch((e: BusinessError) => {
console.error(`发布定制的通知失败 ${e.code} ${e.message}`)
})
}).catch((e: PushError) => {
console.error(`创建通知request失败 ${e.code} ${e.message}`)
})
// ************* 定制通知 end *************
// 返回true,应用自己处理通知
return true;
}
onShowNotification(data: PushNotification | ExtensionNotification): void {
// 处理通知展示事件
}
onReceiveMessage(data: PushMessage): void {
// 处理推送消息
}
}
// 省略其它代码
角标数设置
SDK侧,角标数设置是通过notificationManager.setBadgeNumber方法实现的。需要在定制通知时,主动调用设置,示例代码如下:
import {
aliyunPush,
ExtensionNotification,
IPushListener,
PushError,
PushMessage,
PushNotification
} from '@aliyun/push';
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
/**
* 推送回调接口实现,用于接收推送数据
*/
class MyPushListener implements IPushListener {
onReceiveNotification(data: PushNotification | ExtensionNotification): boolean {
// ************* 定制通知 begin *************
aliyunPush.getPushHelper().createNotificationRequest(data).then((request) => {
// createNotificationRequest 方法已经根据data.badgeAddNum设置了badgeNumber字段,不需要单独处理
// 应用根据需要可以调整 request的字段以实现定制效果。
// 发布通知
notificationManager.publish(request).then(() => {
console.debug(`发布定制的通知成功`)
if (data.badgeSetNum !== undefined && data.badgeSetNum >= 0) {
// 定制通知需要自己处理角标。 对于data.badgeSetNum,需要在此处设置
notificationManager.setBadgeNumber(data.badgeSetNum);
}
// 如果要统一逻辑,这里也可以主动调用onShowNotification方法
this.onShowNotification(data);
}).catch((e: BusinessError) => {
console.error(`发布定制的通知失败 ${e.code} ${e.message}`)
})
}).catch((e: PushError) => {
console.error(`创建通知request失败 ${e.code} ${e.message}`)
})
// ************* 定制通知 end *************
// 返回true,应用自己处理通知
return true;
}
onShowNotification(data: PushNotification | ExtensionNotification): void {
// 处理通知展示事件
}
onReceiveMessage(data: PushMessage): void {
// 处理推送消息
}
}
// 省略其它代码