授权与遥测
本组件默认开启使用情况上报,用于识别谁在使用、何时开始使用,以及发现未授权商用。 上报内容不含任何用户个人信息与业务数据,可在生产环境一键关闭(见「三、如何关闭」)。
一、上报什么、不上报什么
上报字段(每台浏览器每月最多一次):
| 字段 | 说明 |
|---|---|
code | 授权码;未配置时为空串 |
customer | 客户编号(从授权码解出,未授权时为空) |
version | 组件版本号 |
origin / host | 组件部署的域名 |
firstUseAt | 该浏览器首次使用本组件的时间 |
uses | 用到的能力:designer / preview / print / printBatch |
ts | 本次上报时间(服务端以自己的时间为准) |
不上报:用户个人信息、业务单据数据、客户业务数据。服务端不落 IP。
二、什么时候上报
- 只在生产环境:
localhost、127.0.0.1、*.local、*.test、file://一律不上报 - 每台浏览器每月最多一次(跨月才会再次上报)
- 未配置授权码也会上报 —— 这是发现「未授权商用」的唯一途径
- 延迟到浏览器空闲时发送(
requestIdleCallback),不影响首屏性能 - 发送失败(离线 / 被广告拦截器或 CSP 拦下 / 跨域失败)静默忽略,绝不重试轰炸、绝不影响打印功能
三、如何关闭
ts
import { setupLicense } from 'm7_print_designer'
// 方式一:彻底关闭遥测
setupLicense({ report: false })
// 方式二:非生产环境(预发、测试)显式声明,等价于关闭
setupLicense({ env: 'development' })关闭遥测不影响授权码校验与打印功能。
四、授权码
生产环境初始化时调用一次:
ts
import { setupLicense } from 'm7_print_designer'
setupLicense({ code: 'M7PD1.xxxxxxxx.yyyyyyyy' })- 校验完全离线(内置公钥本地验签),不发任何网络请求 —— 断网、内网、无法连接公网时照常工作
- 无码 / 码无效 / 码已过期 → 打印与预览输出铺倾斜重复水印,功能不做任何限制(软授权)
- 开发/测试环境不加水印:
localhost、127.0.0.1、*.local、*.test视为非生产,便于集成自测与演示;生产域名(含预发)才会出现水印 - 水印文案可自定义:
setupLicense({ watermark: '贵公司内部试用' })
五、离线与内网环境
| 场景 | 表现 |
|---|---|
| 断网 / 连不上组件服务器 | 功能完全正常;授权本地校验照常;遥测静默失败 |
内网非 HTTPS(http://192.168.x.x) | 浏览器不提供 WebCrypto,无法验签 → 放行、不加水印(避免误伤已付费客户),控制台提示一次 |
开发/测试环境(localhost、*.local) | 不加打印水印、不上报遥测,便于集成自测 |
| 隐私模式 / 禁用 localStorage | 一切照常,仅遥测无法去重,不报错 |
| 客户网站 CSP 限制外连 | 遥测被拦 → 静默忽略,功能不受影响 |
设计原则:任何网络问题都不影响打印功能。授权判定只依赖本地验签,遥测只是「尽力而为」。
六、安全边界(请知悉)
本机制是「识别 + 提醒」,不是防篡改:
- 组件源码开放,前端校验可以被修改绕过
- 遥测可能被广告拦截器或 CSP 拦掉,统计存在漏报
真正的约束来自授权协议与法律,不来自这里的技术校验。本机制的作用是让使用情况可见、让未授权使用有明确提示。
七、常见问题
Q:我的生产环境在内网、连不上公网,功能会受限吗? 不会。授权校验是本地验签,遥测失败会被静默忽略,打印功能完全正常。
Q:客户不同意上报,怎么处理? 按客户要求调用 setupLicense({ report: false })(或签署协议约定),授权码与水印功能不受影响。
Q:未授权会限制功能吗? 不会。只在打印与预览输出附加水印,所有功能照常可用。
Q:换域名 / 换浏览器会重复上报吗? 上报按「浏览器 + 月份」去重。同一客户多个部署域名会在后台合并到同一客户编号下展示。