• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 清除跨设备场景下的重复通知
2
3<!--Kit: Notification Kit-->
4<!--Subsystem: Notification-->
5<!--Owner: @peixu-->
6<!--Designer: @dongqingran; @wulong158-->
7<!--Tester: @wanghong1997-->
8<!--Adviser: @huipeizi-->
9
10从API version 20开始,为了避免不同渠道发布的通知重复打扰用户(例如,手机协同到当前设备的通知与Push推送服务发布的通知重复),可以使用通知去重功能,清除跨设备场景下的重复通知。
11
12## 实现原理
13
14应用发送通知时携带唯一标识字段[appMessageId](../../application-dev/reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md#notificationrequest-1),分布式通知接收到多渠道发布的通知后,会根据该字段进行判断,从而实现通知去重。
15
16设备只会展示第一条通知,后续收到的重复通知会被静默去重,不展示、不提醒。
17
18**图1** 全场景通知去重流程图
19
20![distributed_messageid](figures/notification_messageid.png)
21
22## 约束条件
23
24- [appMessageId](../../application-dev/reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md#notificationrequest-1)字段的唯一性需由开发者保证,同一条通知在各个设备形态上需保证字段相同。
25- [appMessageId](../../application-dev/reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md#notificationrequest-1)字段仅在发布通知的24小时内有效,超过24小时或者设备重启时该字段会失效。
26
27## 接口说明
28
29| **接口名**  | **描述** |**说明**|
30| -------- | -------- | -------- |
31| [publish](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagerpublish-1)(request: NotificationRequest): Promise\<void\>       | 发布通知。  |使用方法见对象[NotificationRequest](../reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md)中**appMessageId**字段说明。|
32
33## 开发步骤
34
351. 导入模块。
36
37    ```typescript
38    import { notificationManager } from '@kit.NotificationKit';
39    import { BusinessError } from '@kit.BasicServicesKit';
40    ```
41
422. 发布通知消息,通知消息中包含`appMessageId`字段。
43
44    ```typescript
45    // publish回调
46    let publishCallback = (err: BusinessError): void => {
47        if (err) {
48            console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`);
49        } else {
50            console.info(`Succeeded in publishing notification.`);
51        }
52    }
53    // 通知Request对象
54    let notificationRequest: notificationManager.NotificationRequest = {
55        id: 1,
56        content: {
57            notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
58            normal: {
59            title: 'test_title',
60            text: 'test_text',
61            additionalText: 'test_additionalText'
62            }
63        },
64        appMessageId: 'test_appMessageId_1'
65    };
66    notificationManager.publish(notificationRequest, publishCallback);
67    ```
68