今天打开开发者工具,发现图片上传没办法使用,定位也没办法使用,但是用户是肯定允许了的,非常之奇怪。
结果,找了各种原因,做了各种测试,都没有解决,最后问了别人,才知道,是腾讯在作妖。
原因
原因是腾讯发布了一篇新的公告:《关于小程序隐私保护指引设置的公告》
为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。
开发者首先需确定小程序是否涉及处理用户个人信息,如涉及,则需配置用户隐私授权弹窗,且仅有在平台《小程序用户隐私保护指引》中声明了所处理的用户个人信息,才可以调用平台提供的对应接口或组件。
大概意思是,腾讯对隐私更严格了,目前正式版本的小程序暂时没有影响,但是开发和体验版都会提示没有权限,因为没有事先声明权限。
哪些权限是隐私权限
小程序用户隐私清单:https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html
除了我们常规理解的位置信息,照片、剪贴板这些也属于,所以如果没有事先声明的话,甚至没办法发起图片上传功能。
怎么解决
wx.openPrivacyContract(Object object),跳转至隐私协议页面
1 2 3 4 5 |
wx.openPrivacyContract({ success: () => {}, // 打开成功 fail: () => {}, // 打开失败 complete() => {} }) |
wx.onNeedPrivacyAuthorization(function callback),注册 onNeedPrivacyAuthorization 事件监听,当需要用户授权弹窗时会触发,可以通过调用resolve函数,对授权事件进行上报。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// page.wxml <view wx:if="{{showPrivacy}}"> <view>隐私弹窗内容....</view> <button id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button> </view> ```js // page.js Page({ data: { showPrivacy: false }, onLoad() { wx.onNeedPrivacyAuthorization(resolve => { // 需要用户同意隐私授权时 // 弹出开发者自定义的隐私授权弹窗 this.setData({ showPrivacy: true }) this.resolvePrivacyAuthorization = resolve }) wx.getUserProfile({ success: console.log, fail: console.error }) }, handleAgreePrivacyAuthorization() { // 用户点击同意按钮后 this.resolvePrivacyAuthorization({ buttonId: 'agree-btn', event: 'agree' }) // 用户点击同意后,开发者调用 resolve({ buttonId: 'agree-btn', event: 'agree' }) 告知平台用户已经同意,参数传同意按钮的id。为确保用户有同意的操作,基础库在 resolve 被调用后,会去检查对应的同意按钮有没有被点击过。检查通过后,相关隐私接口会继续调用 // 用户点击拒绝后,开发者调用 resolve({ event:'disagree' }) 告知平台用户已经拒绝 } }) |
我个人的解决办法
把能权限都声明一遍,其他什么都不用动,就可以正常使用了。
总而言之,言而总之,腾讯真牛逼!
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/12183