• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 请求通知授权
2
3应用需要获取用户授权才能发送通知。在通知发布前调用[requestEnableNotification()](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagerrequestenablenotification10-1)接口,弹窗让用户选择是否允许发送通知。当用户拒绝授权后,将无法通过该接口再次拉起弹窗。如果应用需要向用户再次申请通知授权,则可以使用[openNotificationSettings](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanageropennotificationsettings13)接口拉起通知管理半模态弹窗。
4
5## 接口说明
6
7接口详情参见[API参考](../reference/apis-notification-kit/js-apis-notificationManager.md)。
8
9**表1** 通知授权接口功能介绍
10
11| **接口名**  | **描述** |
12| -------- | -------- |
13| isNotificationEnabled():Promise\<boolean\>       | 查询通知是否授权。  |
14| requestEnableNotification(context: UIAbilityContext): Promise\<void\> | 请求发送通知的许可,第一次调用会弹窗让用户选择。     |
15| openNotificationSettings(context: UIAbilityContext): Promise\<void\>  | 拉起通知管理弹窗。|
16
17
18## 开发步骤
19
201. 导入NotificationManager模块。
21
22    ```ts
23    import { notificationManager } from '@kit.NotificationKit';
24    import { BusinessError } from '@kit.BasicServicesKit';
25    import { hilog } from '@kit.PerformanceAnalysisKit';
26    import { common } from '@kit.AbilityKit';
27
28    const TAG: string = '[PublishOperation]';
29    const DOMAIN_NUMBER: number = 0xFF00;
30    ```
31
322. 拉起通知弹窗,向用户请求通知授权。
33
34    可通过requestEnableNotification的错误码判断用户是否授权。若返回的错误码为1600004,即为拒绝授权。
35
36    ```ts
37    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
38    notificationManager.isNotificationEnabled().then((data: boolean) => {
39      hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));
40      if(!data){
41        notificationManager.requestEnableNotification(context).then(() => {
42          hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);
43        }).catch((err : BusinessError) => {
44          if(1600004 == err.code){
45            hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);
46          } else {
47            hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);
48          }
49        });
50      }
51    }).catch((err : BusinessError) => {
52        hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
53    });
54    ```
55
563. (可选)拉起通知管理半模态弹窗,向用户再次申请通知授权。
57
58    ```ts
59    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
60    notificationManager.isNotificationEnabled().then((data: boolean) => {
61      hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));
62      if(!data){
63          notificationManager.openNotificationSettings(context).then(() => {
64            hilog.info(0x0000, 'testTag', `[ANS] openNotificationSettings success`);
65          }).catch((err: BusinessError) => {
66            hilog.error(0x0000, 'testTag', `[ANS] openNotificationSettings failed, code is ${err.code}, message is ${err.message}`);
67          });
68      }
69    })
70    ```
71
72
73