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 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