产生原因:
从2023年九月十五号开始,涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。
为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则,方可调用微信提供的隐私接口。
涉及范围:
处理的信息 | 接口或组件 |
收集你的昵称、头像 | <button open-type="chooseAvatar">、<input type="nickname">、<functional-page-navigator name="loginAndGetUserInfo">、wx.getUserInfo (已回收) |
收集你的位置信息 | wx.authorizeForMiniProgram({scope:'scope.userLocation'})、wx.getLocation、wx.startLocationUpdate、wx.getFuzzyLocation |
收集你选择的位置信息 | wx.choosePoi、wx.chooseLocation |
收集你的地址 | wx.chooseAddress |
收集你的发票信息 | wx.chooseInvoiceTitle、wx.chooseInvoice |
收集你选中的照片或视频信息 | wx.chooseImage、wx.chooseMedia、wx.chooseVideo |
访问你的麦克风 | wx.authorizeForMiniProgram({scope: 'scope.record'})、wx.startRecord、RecorderManager.start、<live-pusher>、wx.joinVoIPChat |
访问你的摄像头 | wx.authorizeForMiniProgram({scope: 'scope.camera'})、wx.createVKSession、<camera>、<live-pusher>、<voip-room> |
访问你的蓝牙 | wx.openBluetoothAdapter、wx.createBLEPeripheralServer |
使用你的相册(仅写入)权限 | wx.authorizeForMiniProgram({scope: 'scope.writePhotosAlbum'})、wx.saveImageToPhotosAlbum、wx.saveVideoToPhotosAlbum |
使用你的通讯录(仅写入)权限 | wx.addPhoneContact |
解决方案:
小程序开发者可自行判断时机并且自行设计提示方式,提示用户阅读隐私政策等收集使用规则。同时需要在相关界面中使用 <button open-type="agreePrivacyAuthorization"> 组件,当用户轻触该 <button> 组件后,表示用户已阅读并同意小程序的隐私政策等收集使用规则,微信会收到该同步信息。
协议内容:
-
开发者需要在小程序后台,设置=>服务内容声明=>用户隐私保护指引,对使用的相关接口进行配置。
-
开发者可以在小程序通过调用 wx.openPrivacyContract 接口打开微信隐私页面,让用户知晓用途。
以下提供两种解决方案:
主动版:
开发者可主动通过 wx.getPrivacySetting 接口,查询微信侧记录的用户是否有待同意的隐私政策信息。该信息可通过返回结果 res 中的 needAuthorization 字段获取。如果返回为true则进行隐私授权提示,false则正常进行后续逻辑。
被动版:
微信提供了 wx.onNeedPrivacyAuthorization 接口,意为用户触发了一个微信侧未记录过同意的隐私接口调用,开发者可通过监听该事件选择提示用户的时机。微信还提供了 wx.requirePrivacyAuthorize 接口,可用于模拟隐私接口调用。
两者差异:
-
主动版可以自行决定提示时机,被动版则是在隐私接口调用之后判断是否授权过从而进行后续逻辑
-
被动版全局引入一次实时监听,只有在调用隐私接口时候才会进行判断,主动版则是在指定地方判断执行一次
常见问题:
-
如何开启调试
通过在app.json中添加配置"__usePrivacyCheck__": true 开启调试
基础版本库设置3.0.0以上
-
如何清空历史同步状态
当用户从「微信下拉-最近-最近使用的小程序」中删除小程序,将清空历史同步状态。下次访问小程序后,需要重新同步微信当前用户已阅读并同意小程序的隐私政策等收集使用规则。
开发者可通过此方式进行调试,也可以在开发者工具中「清除模拟器缓存-清除授权数据」清空历史同步状态。
附:主动版解决方案
// 兼容老版本 九月十五号开始 2.32.3 开始支持隐私保护授权
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization((resolve) => {
// 当授权的时候是否需要执行后续操作 需要的话需要通过resolve回传通过 如果不需要授权之后立即执行则可以不添加
// 如果不进行resolve的话 经过测试在相册之类正常但获取手机号环节 当你授权通过后返回页面二次点击的时候无法触发 报错无法多次触发获取手机号,上一个获取手机号并没有结果返回,因此无法触发 需要再次进入则可以正常使用
wx.$resolvePrivacyAuthorization = resolve;
// 跳转自定义的隐私授权弹窗
wx.navigateTo({
url: `/pack2/pages/privacy-authorization/index?resolvePrivacyAuthorization=${resolve}`,
});
console.log("调取了授权");
});
}
// 隐私页面
// 同意
handleAgreePrivacyAuthorization() {
// resolvePrivacyAuthorization 全局监听隐私未授权的resolve回调 调用通过隐私的resolve会在返回上一页之后执行上次未结束的动作
wx.$resolvePrivacyAuthorization({ buttonId: "agree-btn", event: "agree" });
wx.navigateBack({
delta: 1,
});
},
// 不同意
wx.$resolvePrivacyAuthorization({ event: "disagree" });
通过把resolve挂载全局,方便在协议页面进行授权。