- 云开发快速从 getUserInfo 切换到 getUserProfile
getUserProfile 的事在社区里已经闹得沸沸扬扬。 我的项目用的是云开发,处理下来,发现不用调整太多。 小程序端: const fetchOpenId = (userInfo) => { const success = (openId) => { // 到这一步处理用户登录 console.log({ ...userInfo, openId }) } wx.cloud.callFunction({ name: 'getOpenId', success: (r) => { if (r.errMsg === 'cloud.callFunction:ok') { success(r.result) } }, fail: (err) => { console.error(err) } }) } const fetchUserProfile = () => { const success = (res) => { fetchOpenId(res.userInfo) } // 兼容性判断 if (wx.getUserProfile) { wx.getUserProfile({ desc: '用于完善会员资料', success }) } else { wx.getUserInfo({ success }) } } 调用: fetchUserProfile() 云函数 getOpenId const cloud = require('wx-server-sdk') cloud.init() exports.main = async () => { const { OPENID } = cloud.getWXContext() return OPENID } 这样处理会有一个现象:如果用户退出了登录,每次重新登录都会弹出授权。 想了想,这样也挺合理,否则每次登录都没有感知。 记得做好本地存储。
2021-04-25 - 【汇总】wx.getUserProfile 改造常见问题
书接上文 1、如何做版本兼容? 我在项目中使用的是wx.canIUse('getUserProfile')判断getUserProfile API 是否可以使用(切换版本库2.10以下可以模拟旧场景),如果有其他好方法,欢迎在评论区指出。 2、问什么改造过程中遇到了报错?'getUserProfile:fail can only be invoked by user TAP gesture' 一般由于直接使用了这种写法。 应该把wx.login和wx.getUserProfile分开调用,(建议wxlogin获取的code单独保存,每用一次单独刷新一次(code5分钟有效)),据说反着写也行,就是getUserProfile的success 里再调wx.login。 3、授权弹窗没有弹出? 检查下wx.getUserProfile 中的desc字段是否填写(desc为必填,官方意思后续可以展示在弹窗内)。 ⚠️ wx.getUserProfile 调用必须要在catchtap 、bindtap、showmodal 里绑定方法,依旧需要用户主动触发。 手写不易,麻烦乡亲们点个赞,我好完成主人的任务🤓。
2021-04-09