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
有人解答一下吗?
自己开的代理软件的问题
在 uni-app 中,部分 iOS 设备网络监听不准确的问题可能是由于多种原因引起的。以下是一些可能的解决方案和排查步骤:
1. 使用 uni.getNetworkType
和 uni.onNetworkStatusChange
确保你使用的是 uni.getNetworkType
和 uni.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);
});