uni-app ios 部分设备网络监听不准确

uni-app ios 部分设备网络监听不准确

开发环境 版本号 项目创建方式
Mac macOS Big Sur 11.6.5 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:3.4.12

手机系统:iOS

手机系统版本号:iOS 15

手机厂商:苹果

手机机型:iphone 12 promax/iphone xr

页面类型:nvue

vue版本:vue2

打包方式:云端

示例代码:

uni.onNetworkStatusChange((res) => {  
    console.log(res);  

})  
uni.getNetworkType({  
    success: (res) => {  
        console.log(res);  
    }  
}) 

操作步骤:

uni.onNetworkStatusChange((res) => {  
    console.log(res);  

})  
uni.getNetworkType({  
    success: (res) => {  
        console.log(res);  
    }  
}) 

手动关闭对应开关

预期结果:

isConnected值为正常

实际结果:

isConnected值不正常

bug描述:

手动关闭,蜂窝和wifi或者开启飞行模式并关闭wifi 如图附件,结果要么不打印日志,要么会打印错误日志, 手里有 iphone12promax ios15.4 iphone xr ios14.3 测试结果不正常 isConnected为true,

打印日志为 onNetworkStatusChange为 {“isConnected”:true,“networkType”:“wifi”} getNetworkType为 {“errMsg”:“getNetworkType:ok”,“networkType”:“wifi”}

iphone8 ios12.3.1测试正常isConnected为false

4 回复

有人解答一下吗?


在测试中 是不是none 之后就没反应了?

自己开的代理软件的问题

在 uni-app 中,部分 iOS 设备网络监听不准确的问题可能是由于多种原因引起的。以下是一些可能的解决方案和排查步骤:

1. 使用 uni.getNetworkTypeuni.onNetworkStatusChange

确保你使用的是 uni.getNetworkTypeuni.onNetworkStatusChange 这两个 API 来获取和监听网络状态。这两个 API 是 uni-app 提供的标准网络状态获取和监听方法。

// 获取当前网络状态
uni.getNetworkType({
  success: function (res) {
    console.log(res.networkType);
  }
});

// 监听网络状态变化
uni.onNetworkStatusChange(function (res) {
  console.log(res.isConnected);
  console.log(res.networkType);
});

2. 检查 iOS 设备设置

确保设备的网络设置没有问题,例如 Wi-Fi 和蜂窝数据是否正常开启。有时候设备的网络设置可能会影响网络状态的检测。

3. 检查网络权限

确保在 manifest.json 中已经正确配置了网络权限。虽然 iOS 通常不需要显式声明网络权限,但仍然建议检查配置。

{
  "networkTimeout": {
    "request": 60000,
    "connectSocket": 60000,
    "uploadFile": 60000,
    "downloadFile": 60000
  }
}

4. 检查 uni-app 版本

确保你使用的是最新版本的 uni-app。旧版本可能存在一些已知的 bug 或兼容性问题,更新到最新版本可能会解决问题。

5. 检查 iOS 系统版本

某些 iOS 系统版本可能存在与网络状态检测相关的问题。确保设备运行的是较新的 iOS 版本,或者在不同 iOS 版本上进行测试。

6. 使用原生插件

如果 uni-app 提供的网络状态检测 API 无法满足需求,可以考虑使用原生插件来实现更精确的网络状态检测。uni-app 支持调用原生代码,你可以编写原生插件来实现更复杂的网络状态检测逻辑。

7. 调试和日志

在代码中添加调试信息,记录网络状态的变化,以便更好地排查问题。通过日志可以更清晰地了解网络状态检测的实际情况。

uni.onNetworkStatusChange(function (res) {
  console.log('Network status changed:', res.isConnected, res.networkType);
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!