- 【面向公告编程】带你深入分析适配 wx.getUserProfile 以及如何兼容 wx.getUserInfo
前言 由于一些开发者的滥用,为了优化用户体验,微信官方在获取用户信息上,提供了新的API「wx.getUserProfile」,接下来作者将带你解读官方公告(传送门: 小程序登录、用户信息相关接口调整说明),进一步提升“面向公告编程”能力。 常见问题 1、线上版本是不是一定要接入新的 API 才能正常使用? 并不是哦,如果你的小程序是在 2021 年 4 月 13 日后发布的才需要接入,此前发布的线上版本仍不受影响。 2、wx.getUserProfile 从 2.10.4 基础库开始支持,那么 2.10.4 以下基础库不就使用不了这个 API 了吗? 并不是哦,2.10.4 以下基础库仍然可以通过调用原有 API「wx.getUserInfo」获取用户信息及进行解密。 3、为什么开发版和体验版调用 wx.getUserInfo 都不返回用户信息了? wx.getUserInfo 开发版和体验版已对齐匿名表现(返回如下图结果),因此开发者可在 2021 年 4 月 13 日前在开发版或者体验版中,适配新的登录授权流程。 [图片] 4、wx.getSetting 无法获取用户信息的授权(即 scope.userInfo )? 从 2021 年 4 月 13 日开始,无论是通过 wx.authorize 请求授权还是 wx.getSetting 获取授权状态,都将直接返回 true。【PS:由于 wx.getUserProfile 每次调用时都需要用户弹窗授权,因此将无法获取用户授权状态】 [图片] 5、wx.getUserProfile 为什么只能获取到 userInfo 信息,却获取不到 rawData、signature、encryptedData、iv 等信息呢? 据悉,这几天会灰度 2.10.4 ~ 2.16.0 之间支持获取 rawData、signature、encryptedData、iv 等加密信息,具体以官方通知 / 文档为准 新的 API 对基础库有一定的要求,除了参数 userInfo 的值需要 2.10.4 及以上基础库支持获取之外,其它参数也需要 2.16.0 及以上基础库才支持获取。【PS:目前基础库在 2.10.4 ~ 2.16.0 之间将无法获取 rawData、signature、encryptedData、iv 等信息,具体以官方通知为准】 [图片] 6、PC 端微信暂不支持新的 API「wx.getUserProfile」应该怎么处理? 可以通过以下方式兼容。【PS:暂不推荐使用 wx.canIUse(“getUserProfile”) 做兼容判断,后续可使用该方式进行判断】 [代码]if (wx.getUserProfile) { console.log("支持 wx.getUserProfile") } else { console.log("不支持 wx.getUserProfile") } [代码] 7、开发者工具或真机提示 wx.getUserProfile is not a function 错误信息,应该怎么处理? ① 确认开发者工具为 1.05.2103022 及以上版本,并且调试基础库为 2.10.4 及以上。 ② 确认手机微信为 7.0.9 以上版本,且基础库为 2.10.4 及以上。 ③ 如果工具内基础库已设置为 2.10.4 及以上,仍报同样的错误信息,可尝试调高工具基础库直至支持此 API 【PS:一切以真机为准!】 8、wx.getUserProfile 获取 encryptedData 及 iv 参数后进行解密,无法获取到 openid 等信息? 原来调用 wx.getUserInfo 后进行解密可以获取到 openId 等信息如图 1 所示,但是新的 wx.getUserProfile 将无法直接获取到此类用户标识,返回的信息如图 2 所示。 [图片] 9、解密用户信息将不会返回 openId 及 unionId 这类信息,应该怎么解决处理? 新的登录流程有变化!开发者通过 wx.login 获取到用户登录凭证 (code),调用微信登录接口(auth.code2Session)将直接返回 openId、unionId(请先确认已在开放平台绑定该小程序,绑定流程:登录 微信开放平台 — 管理中心 — 小程序 — 绑定小程序) 10、wx.getUserProfile 跟 wx.login 无法同时调用,报 getUserProfile:fail can only be invoked by user TAP gesture 错误信息? 请勿在 wx.login 的 success 回调中调用 wx.getUserProfile。 解决方式: 先使用 [代码]checkSession[代码] 进行登录态检查;提前调用 [代码]wx.login[代码] 再调用 [代码]wx.getUserProfile[代码],完成授权登录流程。 先拖更 据悉:wx.getUserProfile 计划从基础库版本 2.6.6 开始支持 有疑问欢迎在下方留言或者发社区私信
2022-02-15 - 通过canvas2d,100行代码实现压缩图片、添加水印、另存图片并上传
🍙代码片段:https://developers.weixin.qq.com/s/Xache9mO7MmE 🧂写在前面:由于在编辑器插入代码撤销后导致的bug太过于诡异, 我放弃在文本内插入代码,遂在语雀上写了文章,需要代码分析的可去语雀查看。文章地址:https://www.yuque.com/docs/share/ee2856e2-93f3-4cc2-92b8-81fcb051074a?# 《微信小程序 《canvas2d实践》》 🍪业务需要拍摄照片后,添加坐标、时间水印,压缩图片后上传。 微信小程序官方文档里: CanvasContext wx.createCanvasContext(string canvasId, Object this)本接口从基础库版本 1.9.6 起支持在小程序插件中使用从基础库 2.9.0 开始,本接口停止维护,请使用 Canvas 代替创建 canvas 的绘图上下文 CanvasContext 对象那肯定得用Canvas 2d来实现啊! 实现: 选择图片,需通过wx.getImageInfo()拿到图片的宽高;压缩图片,需注意分辨率;绘制图片,需通过canvas.createImage()创建图片,在onload中绘制图片到canvas;添加水印,设置字体时需注意书写语法规范;canvas转为图片并上传,需在onload图片加载完后再转,destWidth和destHeight是实际转出的宽高,canvas2d中需配置canvas而非canvasId;参考链接: 圣殿骑士:https://developers.weixin.qq.com/community/develop/article/doc/000242073903a04e082ab595b52013 https://developers.weixin.qq.com/community/develop/doc/000c4c00f703a84043ba6bf0058c00?highLine=canvas%25202d中的纸玫瑰
2020-11-26