uni-app 在iOS下 通过uni.getConnectedWifi方法获取当前连接的Wi-Fi信息 BSSID格式显示错误

发布于 1周前 作者 wuwangju 来自 Uni-App

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
    }
}

Screenshot

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本号 13.0
HBuilderX类型 正式
HBuilderX版本号 3.8.12
手机系统 iOS
手机系统版本号 iOS 16
手机厂商 苹果
手机机型 iPhone 8 plus
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX

6 回复

对比了一下,显示一位的前面应该是少了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 信息的权限。

解决方案

  1. 检查权限

    • 确保在 iOS 设备上已经授予了应用获取 Wi-Fi 信息的权限。你可以在 Info.plist 文件中添加以下权限声明:
      <key>NSLocationWhenInUseUsageDescription</key>
      <string>我们需要获取您的位置信息以提供更好的服务</string>
      <key>NSLocationAlwaysUsageDescription</key>
      <string>我们需要获取您的位置信息以提供更好的服务</string>
    • 注意:获取 Wi-Fi 信息需要位置权限,因为 Wi-Fi 信息与位置信息相关。
  2. 使用 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);
        }
      });
  3. 使用原生插件

    • 如果上述方法仍然无法满足需求,可以考虑使用原生插件来获取 Wi-Fi 信息。你可以开发一个原生插件,通过调用 iOS 系统的 API 来获取 Wi-Fi 信息,然后在 uni-app 中调用该插件。
  4. 处理 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);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!