1# 订阅通知(仅对系统应用开放) 2 3 4应用需要接收通知,必须先发起订阅,通知子系统提供两种接口:订阅所有应用发布的通知和订阅某些应用发布的通知。 5 6 7系统提供[NotificationSubscriber](../reference/apis-notification-kit/js-apis-inner-notification-notificationSubscriber-sys.md)对象,用于提供订阅成功、通知接收、通知取消、订阅取消等回调接口,将变化信息回调给订阅者。 8 9## 通知订阅原理 10 11通知业务流程由通知子系统、通知发送端、通知订阅端组成。一条通知从通知发送端产生,通过[IPC通信](../ipc/ipc-rpc-overview.md)发送到通知子系统,再由通知子系统分发给通知订阅端。 12 13* 通知发送端:可以是三方应用或系统应用。开发者重点关注。 14 15* 通知订阅端:只能为系统应用,比如通知中心。通知中心默认会订阅手机上所有应用对当前用户的通知。开发者无需关注。 16 17**图1** 通知业务流程 18 19 20 21 22## 接口说明 23 24通知订阅主要接口如下。详细接口介绍请参见[API参考](../reference/apis-notification-kit/js-apis-notificationSubscribe-sys.md)。 25 26**表1** 通知订阅接口介绍 27 28| **接口名** | **描述** | 29| -------- | -------- | 30| subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback<void>): void | 订阅指定应用通知。 | 31| subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback<void>): void | 订阅所有通知。 | 32 33**表2** 通知订阅回调接口介绍 34 35详细接口介绍请参见[NotificationSubscriber](../reference/apis-notification-kit/js-apis-inner-notification-notificationSubscriber-sys.md)。 36 37| **接口名** | **描述** | 38| -------- | -------- | 39| onConsume?: (data: SubscribeCallbackData) => void | 通知回调。 | 40| onCancel?: (data: SubscribeCallbackData) => void | 通知取消回调。 | 41| onUpdate?: (data: NotificationSortingMap) => void | 通知排序更新回调。 | 42| onConnect?: () => void; | 订阅成功回调。 | 43| onDisconnect?: () => void; | 取消订阅回调。 | 44| onDestroy?: () => void | 与通知子系统断开回调。 | 45| onDoNotDisturbDateChange<sup>deprecated</sup>?: (mode: notification.DoNotDisturbDate<sup>deprecated</sup>) => void | 免打扰时间选项变更回调(从API11起已废弃)。 | 46| onDoNotDisturbChanged?: (mode: notificationManager.DoNotDisturbDate) => void | 免打扰时间选项变更回调。 | 47| onEnabledNotificationChanged?: (callbackData: EnabledNotificationCallbackData) => void | 通知开关变更回调。 | 48| onBadgeChanged?: (data: BadgeNumberCallbackData) => void | 应用角标个数变化回调。 | 49 50 51## 开发步骤 52 531. 申请`ohos.permission.NOTIFICATION_CONTROLLER`权限,配置方式请参见[申请应用权限](../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)。 54 552. 导入通知订阅模块。 56 57 ```ts 58 import { notificationSubscribe } from '@kit.NotificationKit'; 59 import { BusinessError } from '@kit.BasicServicesKit'; 60 import { hilog } from '@kit.PerformanceAnalysisKit'; 61 62 const TAG: string = '[SubscribeOperations]'; 63 const DOMAIN_NUMBER: number = 0xFF00; 64 ``` 65 663. 创建订阅者对象。 67 68 ```ts 69 let subscriber:notificationSubscribe.NotificationSubscriber = { 70 onConsume: (data:notificationSubscribe.SubscribeCallbackData) => { 71 let req: notificationManager.NotificationRequest = data.request; 72 hilog.info(DOMAIN_NUMBER, TAG, `onConsume callback. req.id: ${req.id}`); 73 }, 74 onCancel: (data:notificationSubscribe.SubscribeCallbackData) => { 75 let req: notificationManager.NotificationRequest = data.request; 76 hilog.info(DOMAIN_NUMBER, TAG, `onCancel callback. req.id: ${req.id}`); 77 }, 78 onUpdate: (data) => { 79 hilog.info(DOMAIN_NUMBER, TAG, `onUpdate callback. req.id: ${data.sortedHashCode}`); 80 }, 81 onConnect: () => { 82 hilog.info(DOMAIN_NUMBER, TAG, `onConnect callback.`); 83 }, 84 onDisconnect: () => { 85 hilog.info(DOMAIN_NUMBER, TAG, `onDisconnect callback.`); 86 }, 87 onDestroy: () => { 88 hilog.info(DOMAIN_NUMBER, TAG, `onDestroy callback.`); 89 }, 90 }; 91 ``` 92 934. 发起通知订阅。 94 95 ```ts 96 notificationSubscribe.subscribe(subscriber, (err: BusinessError) => { // callback形式调用异步接口 97 if (err) { 98 hilog.error(DOMAIN_NUMBER, TAG, `Failed to subscribe notification. Code is ${err.code}, message is ${err.message}`); 99 return; 100 } 101 }); 102 ``` 103