Skip to content

微信小程序 & 企微开发

订阅消息

问题: 用户勾选"总保持以上选择,不再询问"后,订阅消息弹窗永久消失。

知识点:

  • 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.chooseImagesizeType: ['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)

Released under the MIT License.