MDM应用实现明水印
·
1. 背景
在企业安全的功能场景中,全屏水印是一种有效的防护手段,通常用于保护敏感数据、防范信息泄露,增强文档和图文内容的可追溯性。它通过在屏幕或文档上覆盖可见的水印,起到防篡改、标识来源以及防止非法复制等作用。
视频会议与屏幕共享:例如,在员工或客户的远程会议中,为了防止敏感信息泄露或非法录制,屏幕上可以加上动态或静态水印。
敏感文档:在合同、财务报表等文件上添加全屏水印,确保文件内容只有授权人员可以查看,并且能够追溯文件的流转路径。
监控与审计:在安全监控场景中,水印可以用来标识监控视频内容的来源,确保视频流的安全性和合法性。
2. 功能实现
该方案依赖MDM Kit中的接口实现,性能较好,适合对安全要求较高的场景。调用MDM Kit相关接口,需要应用具备企业MDM应用发布证书,具体申请流程可参考:申请资质。
2.1 接口定义
可以通过securityManager.setWatermarkImage设置水印策略。
2.2 关键代码实现
2.2.1 字符串编辑svg水印文件信息,并保存至沙箱路径:
generateSVG(title: string, subTitle: string) {
const xmlString = `<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="200" viewBox="0 0 300 200">
<!-- 水印文字(倾斜+半透明) -->
<text x="150" y="100" font-family="Arial" font-size="24" fill="#808080" opacity="0.3" text-anchor="middle" transform="rotate(-15, 150, 100)">
${title}
</text>
<!-- 可选:添加第二层小字 -->
<text x="150" y="130" font-family="Arial" font-size="12" fill="#808080" opacity="0.2" text-anchor="middle" transform="rotate(-15, 150, 130)">
${subTitle}
</text>
</svg>`;
let svgPath: string = this.getUIContext()?.getHostContext()?.getApplicationContext().filesDir + '/waterMask.svg';
let file = fs.openSync(svgPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let writeLen = fs.writeSync(file.fd, xmlString);
console.info("write data to file succeed and size is:" + writeLen);
fs.closeSync(file);
}
2.2.2 调用接口securityManager.setWatermarkImage,并传入第一步中的svg图片:
setWaterMask(bundleName: string) {
let wantTemp: Want = {
bundleName: 'com.demo.myapplication',
abilityName: 'EnterpriseAdminAbility',
};
let accountId: number = 100;
try {
let svgPath: string = this.getUIContext()?.getHostContext()?.getApplicationContext().filesDir + '/waterMask.svg';
securityManager.setWatermarkImage(wantTemp, bundleName, svgPath, accountId);
console.info(`Succeeded in setting set watermarkImage policy.`);
} catch(err) {
console.error(`Failed to set watermarkImage policy. Code: ${err.code}, message: ${err.message}`);
}
}
2.3 水印效果
图7-1 全屏明水印效果

图7-2 应用水印效果

3. Q&A
Q:水印接口需要传入应用包名,作为开发者如何获取应用包名?
A:可通过hdc命令行工具查询当前设备包名,可参考文档:查询应用信息命令(dump)。
更多推荐




所有评论(0)