更新记录

1.0.8.1(2025-10-23) 下载此版本

  • 修复utssdk/app-ios/src/index.swift:44:39: error: cannot find type 'WifiFail' in scope
  • 等待官方半个月没人回复,只好自己解决官方苹果ios打包时报错的问题。 自己测试过了才发出来,有问题及时说声我及时修改

平台兼容性

uni-app(4.71)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - × × 4.4 12 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

只是在官方1.0.8版本上进行了修复ios打包的报错问题。

🧩🧩公益项目 完全免费 来个真实评价就行


v1.0.8.1 [修复时间:2025-10-23]

## 1.0.8.1(2025-10-23)
+ 修复utssdk/app-ios/src/index.swift:44:39: error: cannot find type 'WifiFail' in scope
+ 等待官方半个月没人回复,只好自己解决官方苹果ios打包时报错的问题。 自己打包过了没问题才发出来,有问题及时说声我及时修改

需要增加新功能的也可以随时说声

方法一:插件市场直接导入使用

方法二:

(也可以直接把我的uts插件复制到uni.wifi插件里替换文件使用。)

(感谢官方DCloud移动团队开源,本人只修复问题,完全免费)

frequency: 2462表示 WiFi 信号的工作频率,单位是 MHz(兆赫兹)。这里的 2462MHz 属于 2.4GHz 频段(2.4GHz 频段的频率范围通常是 2400-2483.5MHz),
            说明该 WiFi 使用的是 2.4GHz 频段传输数据。

SSID: "WiFi名称"即 Service Set Identifier(服务集标识符),也就是我们通常所说的 WiFi 名称。设备通过 SSID 来识别不同的无线网络,用户连接 WiFi 时看到的名称就是 SSID。

secure: false表示该 WiFi 是否启用了加密安全机制。false说明该 WiFi 未加密,无需密码即可连接;如果为true,则表示 WiFi 已加密(如 WPA2、WPA3 等),需要输入密码才能连接。

BSSID: "f2:5d:54:83:77:f3"即 Basic Service Set Identifier(基本服务集标识符),本质是 WiFi 路由器的物理 MAC 地址(硬件地址)。一个 SSID(WiFi 名称)可能对应多个 BSSID(例如同一名称的多个路由器或同一路由器的 2.4GHz/5GHz 频段),BSSID 用于唯一标识一个物理接入点。
{
    "frequency": 2462,                  //  信号的工作频率
    "SSID": "WiFi 名称",                  //  WiFi 名称
    "signalStrength": 35,               //  表示 WiFi 信号强度  [数值越大 、信号强度越高]    ↑
    "secure": false,                    //  是否加密   true=需要密码   false=不需要密码即可连接
    "BSSID": "f2:5d:54:83:77:f3"        //  WiFi 路由器的物理 MAC 地址
}

🧩🧩🧩1.使用方式


import {
    initWifi,
    getWifiList,
    connectWifi,
    getConnectedWifiInfo
} from "@/common/wifi/index.js";

/**
 * 扫描wifi
 */
async scanWifi() {
    console.log("这是 App(Android + iOS)");

    uni.showLoading({
        title:'加载中'
    })

    try {
        await initWifi();

        let list = await getWifiList();
        // this.WiFiDataList = list;
        console.log('原始wifi list数据=====start')
        console.log(list)
        // 使用示例
        this.WiFiDataList = this.filterWifiList(list)

        console.log('wifiList--------start')
        console.log(this.WiFiDataList)
        console.log('wifiList--------end')

        uni.hideLoading()
    } catch (e) {
        console.log(e,'e=e')
        uni.showToast({
            title: "WiFi 扫描失败!",
            icon: "none"
        });
        uni.hideLoading()
    }

    // try {
    //  // 需要事先申请定位权限(见下)
    //  const wifi = await getConnectedWifiInfo()
    //  if (wifi) {
    //      console.log('当前连接 WiFi:', wifi)

    //      this.myWifiFind = wifi
    //      // wifi.SSID, wifi.BSSID, wifi.frequency, wifi.signalStrength 等
    //  } else {
    //      uni.showToast({
    //          title: '未连接 WiFi',
    //          icon: 'none'
    //      })
    //  }
    // } catch (e) {
    //  console.error(e)
    //  uni.showToast({
    //      title: '获取连接信息失败',
    //      icon: 'none'
    //  })
    // }

},
/**
 * 🧠 过滤逻辑:去除空SSID、重复SSID(保留信号最强)
 * @param {Object} wifiList
 */
filterWifiList(list) {
    if (!Array.isArray(list)) return []
    const validList = list
        .filter(i => i.BSSID && i.BSSID.trim() !== '' && i.SSID)
        .map(ee=>{
            if (ee.frequency > 3000) {
                ee.SSID = ee.SSID + '_5G'
            }
            return ee
        })

    const map = new Map()
    validList.forEach(item => {
        const existing = map.get(item.BSSID)
        if (!existing || item.signalStrength > existing.signalStrength) {
            map.set(item.BSSID, item)
        }
    })

    return Array.from(map.values()).sort((a, b) => b.signalStrength - a.signalStrength)
    // if (!Array.isArray(wifiList)) return []

    // // 1. 过滤空 SSID
    // const validList = wifiList.filter(item => item.SSID && item.SSID.trim() !== '')

    // // 2. 用 Map 去重(按 SSID 保留信号最强的)
    // const map = new Map()
    // validList.forEach(item => {
    //  const existing = map.get(item.SSID)
    //  if (!existing || item.signalStrength > existing.signalStrength) {
    //      map.set(item.SSID, item)
    //  }
    // })

    // // 3. 排序(信号强度由强到弱)
    // const result = Array.from(map.values()).sort((a, b) => b.signalStrength - a.signalStrength)
    // return result
},

🧩🧩🧩2.创建wifi.js

// @/common/wifi/index.js

// 初始化 WiFi 模块
export const initWifi = () => {
    return new Promise((resolve, reject) => {

        // #ifdef APP-PLUS

            uni.startWifi({
                success: res => {
                    console.log("WiFi 模块初始化成功", res);
                    resolve(res);
                },
                fail: err => {
                    console.error("WiFi 模块初始化失败", err);
                    reject(err);
                }
            });

        // #endif

        // #ifdef H5
        console.log("这是 H5 浏览器环境");
        resolve()
        // #endif

    });
};

// 获取 WiFi 列表
export const getWifiList = () => {
    return new Promise((resolve, reject) => {

        // #ifdef APP-PLUS

        uni.getWifiList({
            success: () => {
                console.log("请求 WiFi 列表成功01");
                uni.onGetWifiList(res => {
                    console.log("扫描到的 WiFi 列表02", res.wifiList);
                    resolve(res.wifiList || []);
                });
            },
            fail: err => {
                console.error("获取 WiFi 列表失败", err);
                reject(err);
            }
        });

        // #endif

        // #ifdef H5
        console.log("这是 H5 浏览器环境");
        let wifiList = [
            {
                "frequency": 5785,
                "SSID": "无线名称5G",
                "signalStrength": -45,
                "securityType": "WPA",
                "secure": true,
                "BSSID": "ff:b9:70:87:2c:c2"
            },
            {
                "frequency": 2412,
                "SSID": "无线名称",
                "signalStrength": -64,
                "securityType": "WPA",
                "secure": true,
                "BSSID": "f4:b2:5b:ee:2e:3c"
            },
            {
                "frequency": 2437,
                "SSID": "无线名称03",
                "signalStrength": -85,
                "securityType": "WPA",
                "secure": true,
                "BSSID": "f4:84:09:93:b1:74"
            }
        ]
        resolve(wifiList)
        // #endif

    });
};

// 连接指定 WiFi
export const connectWifi = ({
    SSID,
    BSSID,
    password
}) => {
    return new Promise((resolve, reject) => {

        console.log({
            SSID,
            BSSID, // 安卓需要
            password, // 如果 WiFi 有密码
        })

        uni.connectWifi({
            SSID,
            BSSID, // 安卓需要
            password, // 如果 WiFi 有密码
            success: res => {
                console.log(`连接 WiFi 成功: ${SSID}`, res);
                resolve(res);
            },
            fail: err => {
                console.error(`连接 WiFi 失败: ${SSID}`, err);
                reject(err);
            }
        });
    });
};

// 获取当前连接 WiFi 信息
export function getConnectedWifiInfo() {
    return new Promise((resolve, reject) => {
        // 先确保 startWifi 已初始化(你已有 initWifi)

        // #ifdef APP-PLUS

        uni.startWifi({
            success: () => {
                uni.getConnectedWifi({
                    success(res) {
                        // res.wifi 是当前连接的 wifi info(不同平台字段略有差异)
                        resolve(res.wifi || null)
                    },
                    fail(err) {
                        console.error('getConnectedWifi fail:', err)
                        reject(err)
                    }
                })
            },
            fail(err) {
                console.error('startWifi fail:', err)
                reject(err)
            }
        })

        // #endif

        // #ifdef H5
        console.log("这是 H5 浏览器环境");
        let wifiList = {
                "frequency": 5785,
                "SSID": "无线名称1",
                "signalStrength": -45,
                "securityType": "WPA",
                "secure": true,
                "BSSID": "ff:b9:70:87:2c:c2"
            }
        resolve(wifiList)
        // #endif
    })
}

=========================================

=========================================

以下为官方文档

使用说明

Wi-Fi功能模块

App-iOS平台注意事项

  • iOS平台App获取Wi-Fi信息需要开启“Access WiFi information”能力
    登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启“Access WiFi information”,保存后重新生成profile文件
  • iOS13及以上系统,获取当前连接的Wi-Fi信息需要先获取系统定位权限,因此在iOS13及以上系统使用此接口时,会触发定位权限申请的弹窗

App-Android平台注意事项

  • 如果是自定义基座,需要具备下面的权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

uni.startWifi(OBJECT)

初始化Wi-Fi模块。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi

uni.stopWifi(OBJECT)

关闭 Wi-Fi 模块。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi

uni.getConnectedWifi(OBJECT)

获取已连接的 Wi-Fi 信息

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#getconnectedwifi

uni.getWifiList(OBJECT)

请求获取 Wi-Fi 列表。wifiList 数据会在 onGetWifiList 注册的回调中返回。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList

平台差异说明

App-Android App-iOS
x

uni.onGetWifiList(CALLBACK)

监听获取到 Wi-Fi 列表数据事件。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList

平台差异说明

App-Android App-iOS
x

uni.offGetWifiList(CALLBACK)

移除获取到 Wi-Fi 列表数据事件的监听函数。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList

平台差异说明

App-Android App-iOS
x

uni.connectWifi(OBJECT)

连接 Wi-Fi。若已知 Wi-Fi 信息,可以直接利用该接口连接。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi

平台差异说明

App-Android App-iOS
x

uni.onWifiConnected(CALLBACK)

监听连接上 Wi-Fi 的事件。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected

平台差异说明

App-Android App-iOS
x

uni.offWifiConnected(CALLBACK)

移除连接上 Wi-Fi 的事件的监听函数。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected

平台差异说明

App-Android App-iOS
x

uni.onWifiConnectedWithPartialInfo(CALLBACK)

监听连接上 Wi-Fi 的事件。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo

平台差异说明

App-Android App-iOS
x

uni.offWifiConnectedWithPartialInfo(CALLBACK)

移除连接上 Wi-Fi 的事件的监听函数。

使用文档:https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo

平台差异说明

App-Android App-iOS
x

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android平台: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> iOS平台: iOS13及以上平台获取Wifi信息需要定位权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议