- 关于新版隐私协议接口wx.onNeedPrivacyAuthorization的适配解读以及实现代码
官方公告地址: https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801 目前,开发工具或者体验版的小程序,调试基础库如果是2.33.0及以上就得适配了,线上版本9月15日之后生效,所以这之前需要尽快改完,发布一版,否则到了9月15号之后 线上就会生效报错了。 其实改起来也很简单,以下是实现步骤和代码: 1、首先看一下这个网址,里边包含涉及到的隐私的接口,这些接口都要适配一下 https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html [图片] 在以上接口用到的页面,需要画一下类似上边的弹窗(这个弹窗可以全局定义个组件,方便多个页面共用),然后里边蓝字可以点击后调用wx.openPrivacyContract(Object object)接口即可,会自动跳转打开隐私协议页面。 拒绝按钮可以加一个点击事件,然后在事件里这样写 [图片] 同意按钮比较特殊,布局需要用button这样写,记得给button加一个Id [图片] 然后在handleAgreePrivacyAuthorization里就可以获取到点击事件,这样写 [图片] 2、最后需要在onLoad或者onShow里加上以下监听代码,在这里边让自定义的隐私弹窗显示出来即可。 [图片] 以上代码加上就可以了,如果业务逻辑用到了需要判断是否授权过,可以加上 wx.getPrivacySetting(Object object)去获取是否授权过,用不到可以不加这个判断。
2023-08-16 - 小程序隐私协议开发,手机号授权需要点两次吗?
https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html 关于最新的“小程序隐私协议开发指南”开发中,如果我要获取用户手机号,用户未同意过隐私协议,是要用户点击两次才能拉起手机号授权吗? 第一次点击打开隐私协议弹窗,同意后需要再次主动点击,才能拉起手机号授权
2023-08-28 - 一个组件解决隐私授权:小程序用户隐私保护授权弹窗组件
项目链接:https://github.com/94xy/miniprogram-privacy 效果预览: [图片] 使用方法: 1、复制项目 [代码]component[代码] 文件夹中的 [代码]privacy[代码] 文件夹到小程序项目中的组件目录; 2 、在 page.json 中引入组件 { "usingComponents": { "Privacy": "/component/privacy/privacy" } } 3 、在 page.wxml 中使用组件,需要授权显示弹窗,不需要不显示 <Privacy /> 4 、可以在所有使用了隐私接口的页面都加上该组件,授权一次之后使用所有隐私接口不再需要授权 跳过阅读: 可以不阅读就点击“同意”按钮 <Privacy skipRead="{{true}}" /> 流程: 页面显示时使用 wx.getPrivacySetting 接口查询是否需要授权,需要授权则显示组件;用户点击“拒绝”直接退出小程序,用户点击“同意”关闭弹窗并同步给微信,之后可以正常使用所有隐私接口。 注意事项: 2023 年 9 月 15 号之前,默认不会启用隐私相关功能,所以检测不到需要弹窗的情况,可以在 app.json 中配置 "__usePrivacyCheck__": true 之后,接口才可以检测到是否需要弹窗。个人实际情况:我在开发者工具中配置了 "__usePrivacyCheck__": true ,needAuthorization 无论如何返回的都是 false,但在真机模拟的情况下可以返回 true自动打开隐私保护指引界面需在「小程序管理后台」配置《小程序用户隐私保护指引》,官方用户隐私保护指引填写说明。 取消授权: 微信中「微信下拉-最近-最近使用的小程序」中删除小程序可取消授权。 开发者工具中「清除模拟器缓存-清除授权数据」可取消授权。
2023-08-28 - 关于新版隐私协议接口wx.onNeedPrivacyAuthorization的解读以及实现代码(二)
官方公告地址: https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801 目前,开发工具或者体验版的小程序,调试基础库改成3.0.0可以适配测试,线上版本9月15日之后生效,所以这之前需要尽快改完,发布一版,否则到了9月15号之后 线上就会生效报错了。 这是官方的Demo地址,也是每个页引用一个全局的组件,个人感觉太过于繁琐了,可以参考以下我整理的代码。 https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html 其实改起来也很简单,以下是实现步骤和代码: 1、首先看一下这个网址,里边包含涉及到的隐私的接口,这些接口都要适配一下 https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html [图片] 在以上接口用到的页面,需要画一下类似上边的弹窗(这个弹窗可以全局定义个组件,方便多个页面共用),然后里边蓝字可以点击后调用wx.openPrivacyContract(Object object)接口即可,会自动跳转打开隐私协议页面。 拒绝按钮可以加一个点击事件,然后在事件里这样写,官方demo里也没有加id。 <button class="btn-refuse" catch:tap="clickRefuse">拒绝</button> refuse() { this.resolvePrivacyAuthorization({ event: 'disagree' }) }, 同意按钮比较特殊,布局需要用button这样写,记得给button加一个Id <button id="agree-btn" class="btn-agree" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button> 然后在handleAgreePrivacyAuthorization里就可以获取到点击事件,这样写 handleAgreePrivacyAuthorization() { this.resolvePrivacyAuthorization({ buttonId: 'agree-btn', event: 'agree' }) }, 2、然后每个有隐私接口的页面引用自己的组件,代码如下 { "usingComponents": { "agreement": "/components/agreement/agreement" } } 布局引用 <!-- 隐私授权弹窗 --> <agreement id="agreement" frameTitle="温馨提示" bind:refuse="refuse" bind:agree="agree"></agreement> 让组件弹窗显示,这样写: this.selectComponent('#agreement').show(); 3、最后需要在用到隐私接口的页面的onShow里加上以下监听代码,在这里边让自定义的隐私弹窗显示出来即可。 onShow: function () { let that = this; if (wx.onNeedPrivacyAuthorization) { wx.onNeedPrivacyAuthorization(resolve => { this.selectComponent('#agreement').show();//这里是让组件弹窗显示 this.resolvePrivacyAuthorization = resolve }) } } 以上代码加上就可以了,如果业务逻辑用到了需要判断是否授权过,可以加上 wx.getPrivacySetting(Object object)去获取是否授权过,用不到可以不加这个判断。 //=======================以下是针对昵称输入框input的type="nickname"的代码=========================== 注意:以下代码只是针对input另外加的,上边提到的代码也都要加上才能正常弹出弹窗 布局,在input的外层View加touch事件,然后加一个focus动态控制焦点。 <view catch:touchstart="handleTouchInput"> <input type="nickname" class="text" bindinput="listenerContent" placeholder="输入名称" maxlength="10" value='{{name}}' focus="{{focus}}" /> </view> 然后,touch事件: handleTouchInput() { let that = this if (wx.getPrivacySetting) { wx.getPrivacySetting({//获取是否需要弹出 success: res => { if (res.needAuthorization) { wx.requirePrivacyAuthorize({//该接口请求隐私协议,会自动触发上边的wx.onNeedPrivacyAuthorization success: () => { that.setData({ focus: true, }) }, fail: () => {}, complete: () => {} }) } else { that.setData({ focus: true, }) } }, fail: () => {}, complete: () => {} }) } else { this.setData({ focus: true }) } }, 这样就可以了,记得把上边提到的监听代码都加上。
2023-08-23 - 获取用户隐私协议授权接口wx.getPrivacySetting返回参数内容跟什么配置有关?
小程序中有使用到获取微信用户的手机号码 以及 地理位置等隐私信息 为了符合微信平台的最新隐私协议的授权条例,在查看微信文档开发功能的时候发现以下问题,望大家指点迷津一下,感激不尽 我的开发逻辑:调用 wx.getPrivacySetting接口获取返回的needAuthorization参数如果needAuthorization参数为true 则调用wx.openPrivacyContract接口弹起/打开隐私条例给用户查看问题: 1、请问我这样的开发逻辑正确吗? 2、隐私条例是否需要自己创建一个窗口 并且以文本的形式展示供用户查看才起作用? 3、wx.getPrivacySetting这个接口返回needAuthorization参数跟什么因素有关,这边一直显示返回是false
2023-08-02 - 关于wx.getUserProfile接口的使用是否双标?
我们在11月25日时发布了一个极小的改动,直接导致后台获取了大量的“微信用户”昵称。 一查才知道微信小程序发布了这么一条公告:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01 我看了竞品公司的小程序,他们近期都没有发版,所以他们wx.getUserProfile接口就可以正常使用,获取昵称头像的交互还跟之前一样,即使用户微信更新到了最新的8.0.30版本。 我赶紧让前端同学帮忙回退了小程序版本,可惜仍然不能使用wx.getUserProfile接口。 我想请问一下微信小程序的工作人员,请问下你们关于接口的使用是否双标?不理睬你们公告、不更新小程序的,一点影响都没有。老实按照你们新规则修改接口的,就活该吃亏? 所有使用过微信昵称头像授权接口的开发产品同学,应该都明白新老接口交互上的差异有多大,微信所提供的“最佳实践”,填写昵称头像由过去的2步(点击授权按钮->允许)变成了6步(点击昵称填写->获取微信昵称->点击提交->点击头像填写->获取微信头像->点击提交)。
2022-12-12 - 微信小程序如何处理发版本之前的本地缓存
微信小程序如何处理发版本之前的本地缓存,实际开发中,回遇到比如用户搜索的关键字存本地的操作,但是如果接口调整了,返回的字段发生了变更.那么需要在发布新版本后,处理一下用户之前的本地缓存. 解决方案一: 在版本更新的时候,处理清除缓存操作. (实操失败,也算一种思路,可以试试) onLaunch: function() { // #ifdef MP this.mpUpdate() // #endif } methods: { mpUpdate() { const updateManager = uni.getUpdateManager() // 小程序版本更新管理器 updateManager.onCheckForUpdate(res => { // 检测新版本后的回调 if(res.hasUpdate) { // 如果有新版本提醒并进行强制升级 uni.showModal({ content: '更新到最新版本', showCancel: false, confirmText: '确定', success: res => { if (res.confirm) { updateManager.onUpdateReady(res => { // 新版本下载完成的回调 uni.removeStorageSync('search-history')// 处理清除缓存操作; updateManager.applyUpdate() // 强制当前小程序应用上新版本并重启 }) updateManager.onUpdateFailed(res => { // 新版本下载失败的回调 // 新版本下载失败,提示用户删除后通过冷启动重新打开 uni.showModal({ content: '下载失败,请删除当前小程序后重新打开', showCancel: false, confirmText: '知道了' }) }) } } }) } }) } } 解决方案二: 本地存储版本号, 然后更新后得到最新的版本号,两个版本号不等,然后处理逻辑 文档地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/account-info/wx.getAccountInfoSync.html [图片] onShow(){ let versionNum = uni.getStorageSync('version') || ''; if(!versionNum){ uni.removeStorageSync('search-history') } let accountInfo = wx.getAccountInfoSync(); let version = accountInfo.miniProgram.version; uni.setStorageSync("version", version); this.initHistory(); // 初始化搜索历史记录 }, 小程序内的缓存,首页调用wx.clearStorage 可以清掉。 旧的版本可以用UpdateManager对象来管理更新 https://developers.weixin.qq.com/minigame/dev/api/base/update/UpdateManager.html [图片] [图片]
2022-12-05 - 微信小程序头像昵称实战篇
2022-08-25 api文档地址: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html 目前的api变更后,得到的地址为 临时地址, 这个是文档没有说明的, 最佳实践,是需要把得到的地址上传到自己的服务器,然后用服务器返回的地址作为 真实头像的永久地址. 核心点说明: //获取到api返回的新地址路径 onChooseAvatar(e) { this.avatarUrl = e.detail.avatarUrl console.log('e.detail', e.detail) // this.updateUserInfo(); this.uploadFile(); }, /* 上传 头像 转 话格式*/ uploadFile(){ uni.uploadFile({ url: config.webUrl + '/upload/uploadImages',//后台接口 filePath: this.avatarUrl,// 上传图片 url name:'image', // formData: this.formData, header: { 'content-type': 'multipart/form-data', 'token': uni.getStorageSync('token') }, // header 值 success: res => { let obj = JSON.parse(res.data) console.log('obj', obj) if (obj.code == 1) { let imgUrl = obj.data.full_path; this.userImg = imgUrl; this.updateUserInfo(); } else { uni.showToast({ icon: 'none', title: '图片太大,请重新选择!' }); } }, fail: e => { this.$toast('上传失败') } }); }, 这里需要注意, wx.uploadFile 返回的是字符串类型,需要前端自己处理一下数据结构: [图片] 完整代码如下: import config from "@/common/config.js"; import {debounce} from '@/utils/debounce.js' export default { data() { return { defaultAvatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0', avatarUrl: '', nick_name: '', userImg: '', } }, onLoad() { let userInfo = uni.getStorageSync('userInfo') || {}; let { nick_name,img_url } = {...userInfo}; this.userImg = img_url; this.nick_name = nick_name; }, methods: { onChooseAvatar(e) { this.avatarUrl = e.detail.avatarUrl console.log('e.detail', e.detail) // this.updateUserInfo(); this.uploadFile(); }, inputWord: debounce(function(e){ this.nick_name = e.detail.value console.log('this.nick_name.length',this.nick_name.length) let str = this.nick_name.trim(); if(str.length==0){ this.$toast('请输入合法的昵称') return } if((/[^/a-zA-Z0-9\u4E00-\u9FA5]/g).test(str)){ this.$toast('请输入中英文和数字') return } this.updateUserInfo() }, 1500), /* 上传 头像 转 话格式*/ uploadFile(){ uni.uploadFile({ url: config.webUrl + '/upload/uploadImages',//后台接口 filePath: this.avatarUrl,// 上传图片 url name:'image', // formData: this.formData, header: { 'content-type': 'multipart/form-data', 'token': uni.getStorageSync('token') }, // header 值 success: res => { let obj = JSON.parse(res.data) console.log('obj', obj) if (obj.code == 1) { let imgUrl = obj.data.full_path; this.userImg = imgUrl; this.updateUserInfo(); } else { uni.showToast({ icon: 'none', title: '图片太大,请重新选择!' }); } }, fail: e => { this.$toast('上传失败') } }); }, updateUserInfo(){ let self = this; uni.showLoading({}); let params = { img_url: this.userImg, nick_name: this.nick_name.trim(), } self.$http.post('updateUserInfo', params).then(res => { uni.hideLoading() if (res.data.code == 1) { self.$toast('修改成功!') }else { self.$toast(res.data.msg) } }) }, } } 请一键三连,争取升个级,谢谢各位道友! 补充一下,如果api不生效注意切换一下版本库: 我本地用的2.26.1 [图片] 实际效果图: [图片] [图片]
2022-11-24 - 2022年10月25日后,获取新的用户头像昵称旧版本仍然会正常返回吗?
[图片] 第一条:(wx.getUserProfile)在10月25日后统一返回「灰色头像」、「微信用户」。 但是 第四条:对于低版本,也就是微信版本8.0.16以下(基础库版本2.21.2以下),(wx.getUserProfile)接口将正常返回用户头像昵称 这明显有冲突,一下子统一返回灰色头像,一下子又说低版本返回正常头像和昵称。 我可以理解为以下观点这样吗? 1、微信版本8.0.16以下(基础库版本2.21.2以下)使用接口(wx.getUserProfile)会正常返回头像和昵称,新的「 头像昵称填写能力」组件功能不向下兼容。 2、微信版本8.0.16以上(基础库版本2.21.2以上)使用接口(wx.getUserProfile)会返回「灰色头像」、「微信用户」,新的「 头像昵称填写能力」组件,需要用户自己手动去配置头像和昵称 [图片]
2022-09-04