uni-app 在iOS下 通过uni.getConnectedWifi方法获取当前连接的Wi-Fi信息 BSSID格式显示错误
uni-app 在iOS下 通过uni.getConnectedWifi方法获取当前连接的Wi-Fi信息 BSSID格式显示错误
示例代码:
uni.getConnectedWifi({
partialInfo: false,
success(wifiInfo) {
console.log(wifiInfo)
}
})
操作步骤:
连接Wi-Fi,然后获取当前连接的Wi-Fi信息,中间可以切换几下Wi-Fi看看
预期结果:
标准的BSSID格式应该是和MAC地址一样的用冒号分割的十六进制数;例如:11:22:33:44:55:66
实际结果:
现在显示的格式不对:0:3:7f:12:1:d3
bug描述:
在iOS下,通过uni.getConnectedWifi方法获取当前连接的Wi-Fi信息,返回的BSSID显示的格式不正确,但不是每次都显示错误,个人感觉是在我切换Wi-Fi后出现的概率较大。附件截图是我打印的获取到当前Wi-Fi信息。
{
"errSubject": "uni-getConnectedWifi",
"errCode": 0,
"errMsg": "getConnectedWifi:ok",
"wifi": {
"SSID": "yuncore_xian",
"BSSID": "0:3:7f:12:1:d3",
"frequency": 0,
"secure": false,
"signalStrength": 0
}
}
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC开发环境版本号 | 13.0 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.8.12 |
手机系统 | iOS |
手机系统版本号 | iOS 16 |
手机厂商 | 苹果 |
手机机型 | iPhone 8 plus |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
对比了一下,显示一位的前面应该是少了0,正常的bssid格式是:00:03:7f:12:01:d3;我自己写了个方法,给缺少的补零了,先凑合用吧
iOS系统返回的BSSID 是存在这个问题,后续版本会修复这个问题
回复 DCloud_iOS_WZT: 好的,这个问题影响不大,我自己先改了
您好,请问项目直接导入 uni-wifi 就可以调用 uni.getConnectedWifi 吗?有没有demo啊,我这边项目运行提示 ts开发扩展-ios下载失败。
uni-wifi最新版1.0.6安卓获取wifi信息缺失BSSID。。。。急啊
在 uni-app
中,使用 uni.getConnectedWifi
方法获取当前连接的 Wi-Fi 信息时,可能会遇到在 iOS 设备上 BSSID
格式显示错误的问题。具体表现为 BSSID
可能显示为 null
或者格式不正确。
问题原因
这个问题的原因通常是由于 iOS 系统的限制。iOS 系统对获取 Wi-Fi 信息的权限进行了严格的控制,尤其是在 iOS 13 及更高版本中,苹果进一步加强了隐私保护,限制了应用获取 Wi-Fi 信息的权限。
解决方案
-
检查权限:
- 确保在 iOS 设备上已经授予了应用获取 Wi-Fi 信息的权限。你可以在
Info.plist
文件中添加以下权限声明:<key>NSLocationWhenInUseUsageDescription</key> <string>我们需要获取您的位置信息以提供更好的服务</string> <key>NSLocationAlwaysUsageDescription</key> <string>我们需要获取您的位置信息以提供更好的服务</string>
- 注意:获取 Wi-Fi 信息需要位置权限,因为 Wi-Fi 信息与位置信息相关。
- 确保在 iOS 设备上已经授予了应用获取 Wi-Fi 信息的权限。你可以在
-
使用
uni.getLocation
方法:- 如果
uni.getConnectedWifi
方法无法获取到正确的BSSID
,可以尝试使用uni.getLocation
方法来获取位置信息,然后通过位置信息间接获取 Wi-Fi 信息。 - 示例代码:
uni.getLocation({ type: 'wgs84', success: function (res) { console.log('当前位置的经度:' + res.longitude); console.log('当前位置的纬度:' + res.latitude); // 通过位置信息获取 Wi-Fi 信息 }, fail: function (err) { console.log('获取位置信息失败:' + err.errMsg); } });
- 如果
-
使用原生插件:
- 如果上述方法仍然无法满足需求,可以考虑使用原生插件来获取 Wi-Fi 信息。你可以开发一个原生插件,通过调用 iOS 系统的 API 来获取 Wi-Fi 信息,然后在
uni-app
中调用该插件。
- 如果上述方法仍然无法满足需求,可以考虑使用原生插件来获取 Wi-Fi 信息。你可以开发一个原生插件,通过调用 iOS 系统的 API 来获取 Wi-Fi 信息,然后在
-
处理
BSSID
格式:- 如果
BSSID
格式不正确,可以在获取到BSSID
后,手动进行格式化处理。例如,将BSSID
转换为大写,或者按照特定的格式进行显示。
- 如果
示例代码
以下是一个简单的示例代码,展示如何使用 uni.getConnectedWifi
方法获取 Wi-Fi 信息,并处理 BSSID
格式:
uni.getConnectedWifi({
success: function (res) {
console.log('Wi-Fi 信息:', res);
if (res.wifi) {
let bssid = res.wifi.BSSID;
if (bssid) {
// 处理 BSSID 格式
bssid = bssid.toUpperCase();
console.log('格式化后的 BSSID:', bssid);
} else {
console.log('BSSID 为空');
}
} else {
console.log('未连接到 Wi-Fi');
}
},
fail: function (err) {
console.log('获取 Wi-Fi 信息失败:', err);
}
});