微信小程序 & 企微开发
订阅消息
问题: 用户勾选"总保持以上选择,不再询问"后,订阅消息弹窗永久消失。
知识点:
wx.requestSubscribeMessage被拒绝后,程序无法自动再次触发弹窗。但用户可手动进入小程序设置(wx.openSetting)重新开启订阅开关- 解决方案:引导用户去小程序设置页
wx.openSetting手动打开订阅开关 - 最佳实践:只在必要时请求,避免用户反感后一次性拒绝所有
URL Scheme 生成
知识点:
wx.urlscheme.generate可从服务端生成小程序跳转链接- 适用于短信、邮件、H5 等外部场景拉起小程序
- 每天生成上限 10 万条,有效期 30 天
- URL Scheme 可携带自定义参数(path + query)
长按识别二维码
知识点: 小程序已支持 image 组件的 show-menu-by-longpress 属性,长按图片可识别其中二维码。需基础库 2.7.0+。
NFC 标签打开小程序
知识点: 小程序支持通过 NFC 标签的 URL Scheme 打开。需在 NFC 标签中写入 https://wxapp.tc.qq.com/xxx 格式的链接。
自定义相机
避坑:
CameraContext.takePhoto获取的照片质量偏低,需设置quality: 'high'- 自定义取景框需手动计算位置,注意屏幕比例适配
- 保存到本地相册需
wx.saveImageToPhotosAlbum权限(writePhotosAlbum) - GPS 定位需
wx.getLocation权限,且需在app.json中声明requiredPrivateInfos
滚动穿透
问题: 弹出蒙层后,背景页面仍可滚动。
知识点:
- 旧方案
catchtouchmove在 WebView 下有效,但 Skyline 渲染引擎下无效 - 推荐方案:在蒙层
view上使用catch:touchmove="true"(注意冒号写法) - 或在组件
page-meta中设置page-style="overflow: hidden;" - Skyline 渲染引擎本身已禁止页面滚动,需用
scroll-view包裹可滚动区域
iOS 端图片 EXIF 信息丢失
问题: iOS 上传图片时会自动压缩并丢弃 EXIF(GPS、方向等元数据)。
知识点:
wx.chooseImage的sizeType: ['original']可保留原图wx.chooseMedia+sizeType: ['original']在真机上可能仍丢失经纬度(微信 8.0.27 已知 Bug)- 替代方案:使用
wx.chooseMessageFile从聊天记录选文件,或引导用户从相册原图模式选取 - 压缩时保留 EXIF:使用
exif-js+ 自定义 Canvas 绘制方案
页面间数据传递
| 方法 | 场景 | 优点 | 缺点 |
|---|---|---|---|
| URL 参数 + onLoad | 少数据量跳转 | 简单 | URL 有长度限制(~2KB),对象需 JSON+encode |
| getApp().globalData | 全局共享状态 | 跨多页 | 非响应式,页面销毁后数据仍残留 |
| 事件总线(EventEmitter) | 复杂数据流 | 解耦 | 需手动清理 listener,防泄漏 |
| wx.setStorageSync | 持久化数据 | 可靠 | 同步 IO,大数据量影响性能 |
综合推荐:少量数据用 URL 传参,全局状态用 globalData,持久化用 storage。
小程序插件开发
插件独立于宿主小程序,有独立 AppID。插件页面不能直接跳宿主(需通过 plugin-private:// 协议),开发时需在开发者工具中单独创建插件项目。uni-app 开发插件也需独立项目,不能与主项目混用。
📝 插件开发涉及权限申请、版本管理、功能页配置等多个环节,详见 微信官方文档。
小程序重启 & 强制更新
- 重启:wx.restartMiniProgram({ path: '/pages/index/index' })
- 强制更新:updateManager.onUpdateReady() 监听,弹窗引导重启
- __wxConfig.envVersion 获取当前环境(develop/trial/release)