uni.getConnectedWifi 仅支持微信小程序(基础库2.0.4+)和部分原生透出的App;H5、支付宝/百度/字节系小程序及多数uni-app打包App均不支持,iOS因隐私策略几乎无法获取真实SSID。

uni.getConnectedWifi 在哪些平台能用?
这个 API 看起来最直接,但实际可用范围很窄:uni.getConnectedWifi 仅在微信小程序(基础库 2.0.4+)和部分 App(需原生层透出支持)中有效;H5、支付宝/百度/字节系小程序、以及绝大多数 uni-app 打包的 App(Android/iOS)默认调用会失败或返回空对象。
常见错误现象是:真机调试时 success 回调触发了,但 res.wifi.SSID 是空字符串、"<unknown ssid>"</unknown> 或 null —— 这不是你代码写错了,而是平台没给你权限或根本没实现。
- iOS 真机(尤其 iOS 16+)即使开了定位,也大概率返回空,系统策略限制极严
- Android 12+(API 31)设备上,即使声明了所有权限,也可能抛出
"wifi not available"或静默失败 - HBuilderX 模拟器完全不支持,必须真机测试
App 端获取 SSID 必须加哪些权限和配置?
想在 Android App 中拿到当前 WiFi 名称,光调 API 不行,得过三关:系统权限声明、运行时动态申请、以及对 SSID 字符串的清洗处理。
缺一不可,否则 getSSID() 返回的可能是带双引号的字符串(如 "MyHomeWiFi"),甚至 "<unknown ssid>"</unknown>,而你却以为“没连上”。
- 在
manifest.json的android.permissions中必须包含:"android.permission.ACCESS_WIFI_STATE"、"android.permission.ACCESS_FINE_LOCATION"(注意:从 Android 6.0 起,ACCESS_WIFI_STATE本身不触发弹窗,但读取连接信息实际依赖位置权限) - 首次启动时需主动调用
plus.android.requestPermissions动态申请ACCESS_FINE_LOCATION,用户拒绝后后续所有获取都会静默失败 - 获取到的
ssid一定要做清洗:ssid.replace(/^"+|"+$/g, ''),否则前端显示会多出引号 - 别忘了校验 IP 地址是否有效(
wifiInfo.getIpAddress() !== 0),有些手机未真正连上时也会返回一个假 SSID
为什么 iOS 上几乎拿不到真实 SSID?
这不是 uni-app 的锅,是苹果从 iOS 14 开始强制推行的隐私策略:除非你的 App 有明确的、被审核通过的「需要访问当前 WiFi 名称」的业务理由(比如家庭中枢配网),否则系统一律返回占位符(如 "Wi-Fi" 或空字符串)。
即使你在 manifest.json 里写了 NSLocationWhenInUseUsageDescription,并让用户点了“允许使用位置”,iOS 依然不会把真实 SSID 给你 —— 它只把 WiFi 当作一种粗略的位置辅助信号,而非可暴露的标识符。
- App Store 审核时若声明了位置权限但无合理用途,会被拒
- 试图用私有 API 或越狱手段绕过,会导致上架失败或运行崩溃
- 替代思路:用
uni.getNetworkType判断是否为"wifi"类型,再结合业务逻辑降级(例如“当前处于 WiFi 环境,可启用高清模式”),而不强依赖 SSID 值
有没有更稳妥的跨端方案?
没有银弹,但可以分层兜底。核心原则是:不假设一定能拿到 SSID,而是按平台能力分级响应。
优先级顺序建议是:微信小程序 → App(Android 真机 + 权限到位)→ 降级为仅判断网络类型 → 最终 fallback 到用户手动输入/选择(如配网场景)。
- 微信小程序中,直接用
wx.getConnectedWifi(注意它不在uni.命名空间下,需条件编译) - App 中,封装一个
tryGetSSID()方法,内部先检查window.plus是否存在,再走原生调用,捕获所有异常并返回null - 永远用
uni.getNetworkType做前置判断:只有当networkType === "wifi"时,才尝试获取 SSID;否则直接跳过 - 不要在页面
onLoad里同步阻塞等待 SSID,应设默认状态(如“检测中…”),异步更新 UI
真正的难点不在代码怎么写,而在于接受“SSID 不是总能拿到”这个事实,并在产品逻辑里留出弹性空间。很多线上问题,其实就卡在开发者硬要显示一个本不该显示的名称上。

















