HarmonyOS 鸿蒙Next关于API文档提问

HarmonyOS 鸿蒙Next关于API文档提问 如上图,这里面提到的订阅者所需权限是什么意思,和其他API文档的API方法下面写的需要权限(如下图)

有什么区别吗,这个不理解,请各位解答一下。

cke_6765.png


更多关于HarmonyOS 鸿蒙Next关于API文档提问的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

核心区别:一个是"做事情的权限",一个是"听消息的权限"

API 方法权限(如 geoLocationManager.on

你要主动去做一件事,系统拦住你说:“先证明你有资格”

比喻:你想进入机房操作服务器,门禁卡(权限)是进门的条件,没卡进不去。

订阅者权限(如 COMMON_EVENT_SLOT_CHANGE

系统在广播一条消息,但只允许"有证的人"收听

比喻:机房里发生了故障,广播系统播报了消息,但只允许持有特定证件的人听到这个广播。没证的人虽然也在楼里,但听不到。

对比项 API 方法权限 订阅者权限
场景 调用 API 做事 订阅系统公共事件
权限作用 控制"能不能做" 控制"能不能听"
没权限时 调用报错/返回失败 订阅静默失败,收不到事件
权限类型 多数是用户授权类 多数是系统/签名授权类
示例 ohos.permission.APPROXIMATELY_LOCATION ohos.permission.NOTIFICATION_CONTROLLER
申请方式 module.json5 声明 + 运行时弹窗 module.json5 声明(系统自动校验)

API 权限 = 你要做一件事的通行证(没证直接被拦)
订阅者权限 = 你要听一条广播的入场券(没券听不到,但不会有人告诉你听不到)

所以下次看到文档里的"需要权限",先分清楚是调 API 还是订阅事件,就知道权限用在哪里了。

如有帮助给个采纳谢谢

更多关于HarmonyOS 鸿蒙Next关于API文档提问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


文档中的解释是:

应用在申请权限时,需在项目的配置文件中逐个声明所需权限,否则无法获取授权,并可能导致应用上架申请被驳回。参考文档

深入理解“订阅者所需权限”和需要权限(写代码的人)

当你看到一个 API 标注了“订阅者所需权限”时,它通常出现在**事件发布(Publish/Broadcast)**的上下文中。

  • 它的含义是: 发布者(Publisher)在发送这条广播或事件时,对潜在的接收者(Subscriber)提出了要求。

  • 举个例子: 假设应用 A 发布了一个包含“用户银行余额”的公共事件。如果应用 A 不设置“订阅者所需权限”,那么手机里任何一个恶意 App 只要写了监听代码,都能偷听到这个余额。

  • 安全机制: 应用 A 会在发布时声明:"只有拥有 'ohos.permission.PAYMENT_INFO' 权限的订阅者才能收到我这条消息"。此时,没有该权限的应用即便注册了监听,系统也会拦截,不把数据传给它。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

前置知识

CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。

公共事件从系统角度可分为:系统公共事件和自定义公共事件。

  • 系统公共事件:CES内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如HAP安装、更新、卸载等公共事件。目前支持的系统公共事件请参见系统定义的公共事件
  • 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。

运作机制

每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。

cke_15043.png

订阅者就是这些接收事件的App1、App2、App3…,对于开发者来说,订阅者所需权限通常是我们开发的App需要设置的权限,有这些权限才能接收到公共事件。和其他API文档下面写的需要权限是一样的。

场景 你的角色 权限作用 关键字
位置 API(geoLocationManager 调用方:主动发起请求 你需要权限,才能调用这个 API 本身 需要权限
公共事件(COMMON_EVENT_SLOT_CHANGE 订阅方:监听系统事件 你需要权限,才能收到别人发的事件 订阅者所需权限
  • 你想监听系统发布的 COMMON_EVENT_SLOT_CHANGE(通知开关变化)事件。

  • 逻辑

    • 这个事件是系统 / 其他应用发布的,你只是个 “订阅者”。
    • 为了防止应用随便监听系统敏感行为,系统要求:只有声明了这个权限的应用,才能收到这个事件
    • 你如果不声明这个权限,哪怕代码写得再对,也永远收不到回调,系统会直接把你过滤掉。
  • 你主动调用 geoLocationManager.on('locationChange'),想获取用户的位置信息。

  • 逻辑

    • 位置属于用户隐私,系统默认不允许任何应用直接获取。
    • 所以你必须先申请并拿到这个权限,代码才能正常执行,否则会直接报错、回调不触发。
  • geoLocationManager :你想开启定位监听,你的应用必须有 ohos.permission.APPROXIMATELY_LOCATION,否则代码运行到这一行就会报错。

  • NOTIFICATION:系统在后台发布公共事件。你的应用如果想写个 来监听它,你必须在配置文件里申明这个订阅者权限,否则你永远收不到这个事件的回调。

我理解:订阅者就是你设置条件,让订阅者满足这个条件才能订阅

需要权限:单单就是你做的东西需要某些权限

HarmonyOS 鸿蒙Next的API文档以ArkTS和系统能力接口为核心,主要分为基础能力、媒体服务、分布式数据管理等模块。当前版本API文档包含能力开放列表、接口定义、参数说明及示例代码,需通过华为开发者官网对应版本路径访问。SDK中提供TypeScript声明文件可辅助查阅,注意API等级标注,高版本API可能存在兼容性限制。部分接口仍在演进,需关注版本更新日志中的变更说明。

HarmonyOS NEXT的API文档中,“订阅者所需权限”与常规的“API方法所需权限”存在本质区别。

1. 常规“API方法所需权限” 这是调用API方法本身需要的权限。例如调用getNetworkState()可能需要ohos.permission.GET_NETWORK_INFO。如果应用未声明此权限,调用该方法会直接返回错误或抛出异常,属于调用者(应用)权限

2. “订阅者所需权限” 这是针对事件订阅机制(如on('xxx')监听器)的特殊要求。它强调的不是调用subscribe()on()方法本身需要权限,而是订阅后,当事件被推送给应用时,应用在回调中接收到的数据可能包含敏感信息。因此,系统会要求应用在注册监听之前就已声明相应权限,否则可能无法成功订阅或订阅后无法收到完整数据。

具体区别总结:

  • 触发时机不同:前者在调用API方法时检查;后者在向系统注册监听器时检查。
  • 作用对象不同:前者针对API调用者(应用);后者针对数据源(被订阅的系统服务/对象),要求订阅者必须具备访问该数据源的资格。
  • 控制粒度:某些API可能允许无权限订阅,但订阅后事件回调中返回的数据会被脱敏或为空,只有持有相应权限的应用才能获得完整数据。

在HarmonyOS NEXT中,这种设计是为了更精细地控制敏感数据的传播链路,避免仅通过注册事件监听就绕过权限检查。例如,订阅网络状态变化事件,即使无权限也能收到状态变化通知,但具体网络标识(如SIM卡信息)仅在应用声明了对应权限后才在事件体中提供。

回到顶部