
回复
作为一个曾因权限设置踩过坑的开发者,今天必须聊聊HarmonyOS的分布式权限控制!第一次做设备共享时,没正确申请权限导致功能崩溃,后来摸透了这套安全机制,现在分享给大家避坑~
HarmonyOS的权限体系就像小区门禁,不同权限对应不同门卡:
DISTRIBUTED_PERIPHERAL_ACCESS
权限,结果打印机怎么都连不上,后来才知道敏感操作必须有「高级门卡」~在module.json5
里加权限声明,像告诉小区物业你要干啥:
{
"requestPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "需要同步设备数据",
"usedScene": {
"abilities": ["MainAbility"],
"when": "inuse"
}
}
]
}
reason
要写清楚为啥要权限,不然用户可能拒绝~
敏感权限得动态问用户要,比如绑定设备时:
import { abilityAccessCtrl } from '@kit.AbilityKit';
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(context, ['ohos.permission.DISTRIBUTED_DEVICE_BIND'])
.then(() => console.log('用户授权成功!'))
.catch(() => console.log('用户拒绝了权限...'));
建议在用户触发操作时申请,比如点击「连接设备」按钮时,别一打开应用就问,容易被拒~
干活前先看看有没有权限,像进门先掏钥匙:
import { permissionManager } from '@kit.SecurityKit';
permissionManager.hasPermission('ohos.permission.READ_DEVICE_INFO')
.then((hasPerm) => {
if (hasPerm) {
// 执行设备信息查询
} else {
// 引导用户去设置授权
}
});
HarmonyOS会自动给传输的数据加密,像给快递包裹加密码锁。实测传文件时,用抓包工具也看不到内容,安全!
支持碰一碰、输PIN码等认证方式,我给爸妈的设备用「碰一碰」认证,手机贴一下就搞定,比输密码简单100倍~
系统会记下拉设备操作日志,比如谁连了设备、什么时候传了数据,出问题时能溯源,超安心~
场景 | 必备权限 | 申请时机 |
---|---|---|
设备发现 | DISTRIBUTED_DEVICE_DISCOVERY |
点击「搜索设备」时 |
设备控制 | DISTRIBUTED_DEVICE_CONTROL |
首次点击「控制设备」时 |
打印共享 | DISTRIBUTED_PERIPHERAL_ACCESS |
选择打印机时 |
数据同步 | DISTRIBUTED_DATASYNC |
首次同步数据时 |
// 旧版本处理逻辑
现在做分布式应用,我都会先画权限流程图,就像规划小区门禁路线。上次用这套机制做了个家庭设备管理App,爸妈用的时候没弹出过奇怪的权限提示,超有成就感~