更新记录
1.0.0(2026-07-16)
首次发布
新增
- 双端网络连通探测:统一
checkReachable()API,一次调用覆盖 Android / iOS - HTTPS 自签名证书跳过:
trustAllCerts一键放行,适配企业内网、私有化部署、IP 直连环境 - 任意响应码即判定可达:与
uni.request的 success/fail 语义一致,便于无缝替换 - Android 子线程探测:网络请求在
Thread中执行,runOnUiThread回调切主线程,不阻塞 UI(避免 ANR) - iOS 同步等待 + 主线程回调:
DispatchSemaphore同步等待URLSession.dataTask,DispatchQueue.main.async回调 - 超时配置:
timeout参数,默认 10 秒 - 资源释放:Android
finally确保HttpURLConnection.disconnect(),无连接泄漏 - 回调闭环完备:成功 / 失败 / 异常 / 极端无响应均有回调,调用方不会"等不到结果"
平台兼容性
uni-app x(4.0)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 6.0 | 1.0.0 | 15 | 1.0.0 | - | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | √ | × |
liyq-netcheck
一行代码,检测内网服务是否在线 · 自签名证书也能精准探测
🌟 特别适合:企业内网、私有化部署、HTTPS 自签名证书、IP 直连服务的可达性检测
checkReachable 是一款基于 UTS(uni TypeScript) 的原生插件,专解决 uni.request / uni.downloadFile 无法探测自签名 HTTPS 内网服务的痛点——浏览器能访问,App 里却一直 fail。插件在网络层跳过 SSL 证书校验,任意 HTTP 响应即判定服务可达,覆盖 Android / iOS 双端。
适用场景:App 启动时检测内网服务在线状态、web-view 加载业务页前的可达性预检、服务健康检查、私有化部署环境探测、IP 直连/自签名证书服务器连通性判断……
为什么需要 liyq-netcheck?
如果你在做企业内网 App,一定遇到过这个死结:
| 现象 | 原因 |
|---|---|
内网服务浏览器能打开,App 里 uni.request 探测却一直 fail |
服务用了自签名证书,App 原生网络栈(NSURLSession / HttpURLConnection)只信任系统 CA,不信任自签名 → TLS 握手失败 |
| 浏览器能访问是因为手动点了"高级 → 继续前往" | 原生网络栈不会做这种交互式覆盖 |
manifest 里 nsallowsarbitraryloads:true / cleartextTrafficPermitted:true 都设了还是不行 |
这两个配置只放宽明文 HTTP,不解决 HTTPS 自签名信任 |
想用 uni.request 的 sslVerify:false? |
uni-app x 没有这个选项 |
liyq-netcheck 的解决方案:在网络层用原生 UTS 插件跳过证书校验,做一次轻量 GET 探测——能收到任意 HTTP 响应(含 4xx/5xx)就说明服务在线,只有真正超时/断网才判定不可达。
import { checkReachable } from '@/uni_modules/liyq-netcheck'
checkReachable({
url: 'https://192.168.1.100:8443/api/health', // 内网自签名 + IP 直连
timeout: 5000,
success: () => { console.log('服务在线') },
fail: (err) => { console.log('服务不可达:', err) }
})
与 liyq-down-save 的区别
两款插件都内置 trustAllCerts 机制,但定位不同,按需选用或搭配:
| liyq-netcheck | liyq-down-save | |
|---|---|---|
| 定位 | 连通性探测(轻量) | 文件下载保存(重量) |
| 做什么 | 判断服务是否在线 | 下载文件并存到系统目录 |
| 传输数据 | 不传不收(只看响应码) | 完整下载文件内容 |
| 典型场景 | App 启动检测、web-view 预检、健康检查 | 报表导出、附件下载、内网文件拉取 |
常见搭配:启动时用 netCheck 探测内网是否在线,在线后再用 down-save 下载业务文件。
平台支持
| 平台 | 支持状态 | 说明 |
|---|---|---|
| Android (uni-app-x) | ✅ | 子线程探测,不阻塞 UI;INTERNET 权限(默认含) |
| iOS (uni-app-x) | ✅ | UTS-iOS 默认子线程 + DispatchSemaphore 同步;无额外权限 |
| HarmonyOS | ❌ | 后续按需支持 |
| H5 / 小程序 | ❌ | 非原生场景,浏览器自有证书处理 |
最低版本要求:HBuilderX 3.6.8+,uni-app-x 4.0+
快速开始
安装
将 liyq-netcheck 从 DCloud 插件市场导入,或手动把 liyq-netcheck/ 目录放入项目的 uni_modules/。
三秒上手
import { checkReachable } from '@/uni_modules/liyq-netcheck'
checkReachable({
url: 'https://internal.company.com:8443/',
success: () => {
uni.showToast({ title: '服务在线' })
},
fail: (err) => {
uni.showToast({ title: '服务不可达', icon: 'none' })
}
})
API 文档
checkReachable(options)
探测目标地址的连通性(跳过 SSL 证书校验)。
参数
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
url |
string |
✅ | — | 目标地址(支持 HTTP / HTTPS,自签名证书与 IP 直连均可) |
timeout |
number |
❌ | 10000 |
超时时间(毫秒) |
success |
function |
❌ | — | 收到任意 HTTP 响应(含 4xx/5xx)触发,表示服务可达 |
fail |
function |
❌ | — | 连接超时 / 网络中断 / DNS 失败时触发,参数为错误描述 string |
判定语义
success:收到任意 HTTP 状态码(200/4xx/5xx 都算)——服务进程在线、端口开放、能响应fail:连接超时、网络中断、DNS 解析失败——服务不可达
这与
uni.request的success/fail语义一致(uni.request的 success 在任意状态码触发),便于无缝替换。
使用示例
1. App 启动检测内网服务
checkReachable({
url: 'https://10.0.0.88:1001/api/ping',
timeout: 5000,
success: () => {
// 服务在线,进入业务页
uni.redirectTo({ url: '/pages/index/index' })
},
fail: () => {
// 服务不可达,提示连接 VPN 或内网
uni.showModal({
title: '无法连接服务',
content: '请确认已连接企业内网或 VPN',
showCancel: false
})
}
})
2. web-view 加载前的可达性预检
避免 web-view 直接加载不可达地址导致白屏等待:
checkReachable({
url: 'https://internal.company.com/mobile/',
timeout: 8000,
success: () => {
// 服务在线,加载 web-view
viewCfg.state = true
},
fail: () => {
// 服务不可达,展示错误页 + 重试
viewCfg.state = false
viewCfg.loading = false
}
})
3. 服务健康检查轮询
const healthCheck = () => {
checkReachable({
url: 'https://api.internal.com/health',
timeout: 3000,
success: () => console.log('✅ 服务正常'),
fail: (err) => console.error('❌ 服务异常:', err)
})
}
setInterval(healthCheck, 60000) // 每分钟检测一次
各平台实现机制
Android
- 子线程探测:网络请求在
Thread中执行,不阻塞 UI 线程,避免 ANR - 回调切主线程:通过
runOnUiThread回到主线程触发success/fail - 证书跳过:
hybrid.kt注入自定义SSLContext+TrustAllManager+HostnameVerifier(与 liyq-down-save 同源,经实战验证) - 资源释放:
finally确保HttpURLConnection.disconnect(),无连接泄漏
iOS
- 子线程同步:UTS-iOS 方法默认在子线程执行,
DispatchSemaphore同步等待URLSession.dataTask回调 - 回调切主线程:
DispatchQueue.main.async确保回调在主线程 - 证书跳过:
URLSessionDelegate实现urlSession(_:didReceive:completionHandler:),返回.useCredential接受自签名证书 - 兜底完备:dataTask 无响应/异常/超时均有 fail 回调,不会让调用方"等不到结果"
技术特性
trustAllCerts 证书跳过
通过原生层跳过 HTTPS 证书校验,完整覆盖企业内网、私有化部署、IP 直连、自签名证书场景:
| 平台 | 旁路机制 |
|---|---|
| Android | 自定义 SSLContext + X509TrustManager(hybrid.kt 原生 Kotlin 混编)+ HostnameVerifier |
| iOS | URLSessionDelegate 的 urlSession(_:didReceive:completionHandler:) 返回 .useCredential |
⚠️ 安全提醒:
trustAllCerts跳过全部 HTTPS 证书校验,仅限可信内网环境使用。公网请求请用uni.request(系统默认校验)。本插件设计上只做 GET 连通探测、不传输敏感数据,风险可控。
为什么任意响应码都算可达?
checkReachable 的语义是"服务是否在线",不是"接口是否正常"。一个返回 500 的服务,其进程依然在运行、端口依然开放、能响应请求——从"连通性"角度它是可达的。这与 uni.request 的 success(任意状态码触发)语义一致,便于无缝替换原有探测逻辑。
不阻塞 UI
- Android:原生
Thread子线程 +runOnUiThread回调,主线程零阻塞 - iOS:UTS-iOS 默认子线程 +
DispatchSemaphore+DispatchQueue.main.async
常见问题
Q: 为什么不直接用 uni.request + sslVerify?
uni-app x 的 uni.request 没有 sslVerify 选项,且底层走系统网络栈,无法跳过自签名证书校验。这是系统级限制,非配置可解决。
Q: trustAllCerts 安全吗?
trustAllCerts 跳过证书校验,仅限可信内网环境。本插件只做 GET 连通探测、不传 body/headers/敏感数据,风险面极小。公网服务请用 uni.request。
Q: 能探测非 HTTP 服务(如 TCP/数据库端口)吗?
当前版本专注 HTTP/HTTPS 连通探测。若需裸 TCP 端口探测,可反馈需求评估。
Q: Android 探测会卡 UI 吗?
不会。 Android 端网络请求在 Thread 子线程执行,回调通过 runOnUiThread 切回主线程,全程不阻塞 UI。
Q: 如何反馈 Bug 或提需求?
请通过 DCloud 插件市场「问答反馈」联系作者,通常 24 小时内响应。
版本更新
详见 changelog.md
售后与支持
- Bug 修复:购买后终身享受 Bug 修复更新
- 使用咨询:通过插件市场「问答反馈」,24 小时内响应
- 功能建议:欢迎提交需求,高优先级功能将在后续版本实现
授权许可
| 版本 | 价格 | 授权范围 |
|---|---|---|
| 标准版 | ¥9.9 | 编译产物,可在任意数量个人/企业项目中使用 |
| 源码版 | ¥99.0 | 完整源码,可自由修改、二次开发、定制功能 |
授权说明:购买即授权在任意数量项目中使用。源码版可自由修改与二次开发。禁止转售、重新分发或上传至其他插件市场。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 0
赞赏 0
下载 12431468
赞赏 1934
赞赏
京公网安备:11010802035340号