剪贴板权限须在隐私协议中单列条款说明,目的需具体(如“点击复制链接按钮时临时写入”)、范围限于当前操作内容、强调用户主动触发;android需manifest配置+网页条款,小程序需后台勾选+requiredprivateinfos加入"getclipboard";用户拒绝后须前端判断授权状态并ui降级,禁用绕过方案。

uni-app剪贴板权限在隐私协议里必须单独写明
剪贴板(uni.setClipboardData / uni.getClipboardData)属于敏感权限,工信部《APP违法违规收集使用个人信息行为认定方法》明确将其列为“非必要不获取”的高风险能力。微信小程序和 Android App 上架审核时,只要代码里调用了剪贴板 API,就必须在隐私政策中**单列条款说明**,不能混在“设备信息”或“其他用途”里一笔带过。
剪贴板条款怎么写才过审
必须同时满足三点:目的清晰、范围最小、用户可拒绝。常见错误是写成“用于提升用户体验”这种模糊表述,会被应用商店直接驳回。
- 目的只能写具体场景,比如:
“当您点击‘复制链接’按钮时,我们将临时将该链接写入系统剪贴板,以便您粘贴到微信、短信等其他应用中” - 范围必须限定为“仅当前操作所涉及的内容”,禁止出现“同步剪贴板内容”“监控剪贴板变化”等描述
- 必须强调“该操作需您主动触发(如点击按钮),我们不会在后台静默读取或写入剪贴板”
- 若使用了
plus.clipboard(5+原生层)或监听clipboardchange事件,还需额外声明:“仅在您打开【XX功能页】且开启对应开关后,才启用剪贴板变更监听”
Android 和小程序的配置差异不能忽略
uni-app 项目里剪贴板行为分两个层面:App 端走 plus.clipboard 或 uni.*ClipboardData,小程序端走 wx.setClipboardData。二者隐私要求不同:
- Android App:只要 manifest.json 中
privacy.prompt配置为"template",且隐私政策网页里已包含上述剪贴板条款,就满足基础合规;无需额外申请android.permission.READ_CLIPBOARD(Android 12+ 已废弃该权限) - 微信小程序:必须在小程序管理后台的《用户隐私保护指引》中,勾选
“读取剪贴板”并填写对应说明;同时manifest.json的mp-weixin.requiredPrivateInfos数组里要显式加入"getClipboard"(注意不是"setClipboard",微信只校验读取) - 真机调试时,iOS 微信基础库 ≥ 2.32.3 才会触发隐私弹窗,低于此版本调用
uni.getClipboardData会静默失败,但不会报错——容易漏测
用户拒绝后代码该怎么处理
很多开发者以为“不调用 API 就行”,其实不然。一旦用户在隐私弹窗点“不同意”,uni.getClipboardData 和 uni.setClipboardData 在 Android App 上会直接返回 { errMsg: "setClipboardData:fail permission denied" };小程序则根本不会执行回调。
- 必须在调用前加兜底判断:
if (uni.getStorageSync('hasAgreedPrivacy')) { ... },不能依赖 try/catch 捕获失败 - UI 层要降级:比如“复制链接”按钮在未授权时显示为灰色,并提示“请先同意隐私政策以启用复制功能”
- 严禁在用户拒绝后自动 fallback 到
document.execCommand('copy')或navigator.clipboard.writeText—— 这属于绕过平台管控,审核必拒
最易被忽略的是:剪贴板操作本身不触发系统级权限请求框,但它依附于整个 APP 的隐私协议授权状态。哪怕你只在某个二级页面用一次 uni.setClipboardData,也必须确保首次启动时的隐私弹窗已完整覆盖该能力说明——否则用户点“同意”后,该页面仍可能因条款缺失被平台判定为“超范围收集”。











