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![notification_internal_principle](figures/notification_internal_principle.png)
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:&nbsp;notification.DoNotDisturbDate<sup>deprecated</sup>)&nbsp;=&gt;&nbsp;void | 免打扰时间选项变更回调(从API11起已废弃)。 |
46| onDoNotDisturbChanged?: (mode:&nbsp;notificationManager.DoNotDisturbDate)&nbsp;=&gt;&nbsp;void           | 免打扰时间选项变更回调。 |
47| onEnabledNotificationChanged?: (callbackData:&nbsp;EnabledNotificationCallbackData)&nbsp;=&gt;&nbsp;void | 通知开关变更回调。       |
48| onBadgeChanged?: (data:&nbsp;BadgeNumberCallbackData)&nbsp;=&gt;&nbsp;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