# 发布公共事件如何限制指定的订阅者接收

#### 问题现象

其他平台上可以对广播的发送器或接收器施加限制，可以通过权限将广播限定到拥有特定权限的一组应用。HarmonyOS的公共事件是否有类似的机制？

#### 背景知识

*   动态订阅公共事件：动态订阅的公共事件回调受应用状态影响。当应用处于后台时，无法接收到动态订阅公共事件。当应用从后台切换到前台时，最多可以回调切回前30s内监听的公共事件。
*   HiDumper：HiDumper是用于统一系统信息导出的命令行工具，支持分析CPU、内存、存储等系统资源使用情况，查询系统服务运行情况，定位资源使用异常、通信等相关问题。

#### 解决方案

*   **方案一**：利用权限约束。
    
    在发送公共事件时，发送方在CommonEventPublishData的subscriberPermissions属性内指定只有获取了某些权限的应用可以接收到此公共事件，或订阅方在创建订阅者时，在CommonEventSubscribeInfo的publisherPermission属性限定只接收获取了指定权限的应用发布的公共事件。
    
    以自定义custom.permission.Publisher权限为例，创建订阅者后可以通过命令hidumper -s 3299 -a -e来查询订阅者设置的权限是否生效。
    
*   **方案二**：发送方或订阅方指定包名。
    
    如果可以明确只向某一个应用发送公共事件，或者只接收来自某一个应用的公共事件，也可以通过指定包名来约束发送方或订阅方。
    
    在发送公共事件时，发送方在CommonEventPublishData的bundleName属性指定接收方的包名，或订阅方在创建订阅者时，在CommonEventSubscribeInfo的publisherBundleName属性指定发送方的包名，即可限制此公共事件不被其他任何应用所监听到。