微信小程序“扫码连WiFi”需先调用wx.startWifi启用模块,再解析二维码获取SSID与密码,最后调用wx.connectWifi连接;必须提前申请位置权限,Android需轮询获取列表,iOS需监听事件,且二维码须为标准Wi-Fi URI格式。

微信小程序里“扫码连WiFi”不是靠 uni.scanCode 直接扫出 WiFi 密码,而是用扫码触发配网流程——真正连接 WiFi 的动作仍由系统 API 或插件完成。这个功能在智能硬件配网场景中非常刚性,但容易误以为扫个二维码就能自动连上,结果卡在权限、回调时机或平台差异上。
扫码后必须先调用 uni.startWifi 才能获取列表
很多开发者扫完码就急着调 uni.getConnectedWifi 或 uni.connectWifi,但微信小程序的 WiFi 模块是惰性启动的:不显式开启,后续所有 WiFi 相关 API 都会静默失败或返回空。
-
uni.startWifi必须在扫码成功后的回调里立即执行,不能延迟、不能放在异步队列里 - Android 端如果没提前申请
scope.userLocation权限,startWifi会直接 fail,且不会弹权限提示框(得自己先uni.authorize) - iOS 端
startWifi成功后,系统才开始后台扫描,但不会立刻触发onGetWifiList;需监听事件并手动调用uni.getWifiList主动拉取
onGetWifiList 回调只在 iOS 上可靠,Android 要主动轮询
微信文档写“监听 WiFi 列表更新”,但实际 Android 端该事件几乎不触发,iOS 端也只在系统扫描完成时发一次。指望它自动刷新列表会白等。
公众号运营:文章发布至草稿、样式封面、评论与用户管理、数据统计等。用户要求将 Markdown 发送到公众号草稿、查看阅读量统计或类似后台操作时,使用本技能。
- iOS:注册
uni.onGetWifiList后,再调一次uni.getWifiList触发扫描,之后等回调即可 - Android:必须用
setInterval轮询uni.getWifiList,建议间隔 1500ms,最多试 5 次;否则常出现“列表为空”但其实信号已扫到 - 两者都必须在
uni.startWifi成功后才能调getWifiList,否则返回errCode: 12004(模块未启用)
扫码内容格式决定配网方式,不是所有二维码都能连 WiFi
所谓“扫码连 WiFi”,本质是扫码解析出 SSID 和密码,再交给系统连接。但二维码内容必须是标准格式,否则 connectWifi 会报 errCode: 12005(参数错误)。
- 推荐用 Wi-Fi 标准 URI 格式:
wifi:S:MyNetwork;T:WPA;P:mypass123;;(注意末尾两个分号) - 避免手动生成含中文 SSID 或特殊字符的二维码,iOS 对 UTF-8 解码不稳定,容易截断
- 如果扫码得到的是设备序列号或 token(如 AirKiss 场景),就不能走
connectWifi,得换用requirePlugin('airkiss')这类专用插件 - 密码为空时,
connectWifi的password字段必须传空字符串'',不能传null或undefined
真机调试时 iOS 和 Android 的行为差异极容易被忽略
开发阶段在微信开发者工具里一切正常,一上真机就失败,90% 出在这几个点:
- iOS 微信客户端必须 ≥ 8.0.30,旧版本不支持
connectWifi的 WPA3 协议,连 5G WiFi 会静默失败 - Android 12+ 要求 App 在 manifest 中声明
android.permission.ACCESS_FINE_LOCATION,uni-app 的permissions配置只影响小程序端,App 端需额外处理 - 用户手动关闭手机 WiFi 开关后,
startWifi不报错但后续全部失效,得加uni.getConnectedWifi做兜底检测 - 微信 iOS 版对同一 SSID 的重复连接有防抖,30 秒内再次调
connectWifi可能直接走缓存,不校验密码
最麻烦的其实是那个“扫完码后点击连接按钮才开始连”的交互节奏——用户扫了码,你得立刻启动 WiFi 模块、等列表、匹配 SSID、再调连接,中间任何一环断掉,体验就碎了。别省那几百毫秒的等待,老老实实加 loading 和超时 fallback。


















