跳过内容

开始使用

GitHub
终端窗口
npm install @capgo/capacitor-network-diagnostics
npx cap sync
import { NetworkDiagnostics } from '@capgo/capacitor-network-diagnostics';

生成完整的诊断报告

生成完整诊断报告

runDiagnostics 在受限网络上为用户收集支持报告的最快方法是

const report = await NetworkDiagnostics.runDiagnostics({
urls: [{ url: 'https://api.example.com/health', method: 'HEAD' }],
ports: [{ host: 'api.example.com', port: 443 }],
websockets: [{ url: 'wss://ws.example.com/socket' }],
download: {
url: 'https://speed.example.com/5mb.bin',
maxBytes: 5 * 1024 * 1024,
},
packetLoss: {
mode: 'tcp',
host: 'api.example.com',
port: 443,
count: 10,
},
});
console.log(report.status.connectionType);
console.log(report.issues);

检查当前网络状态

生成检查当前网络状态
const status = await NetworkDiagnostics.getNetworkStatus();
console.log(status.connected);
console.log(status.connectionType);
console.log(status.internetReachable);
console.log(status.captivePortal);

具体标志取决于平台。 Android 可以报告验证的互联网和被捕获的门户状态。 iOS 报告路径状态、接口类型、昂贵路径和受限路径通过 Network.framework.

测试API可达性

生成测试API可达性
const result = await NetworkDiagnostics.testUrl({
url: 'https://api.example.com/health',
method: 'HEAD',
timeoutMs: 5000,
followRedirects: true,
});
if (!result.reachable) {
console.warn(result.errorCode, result.errorMessage);
}

使用您的后端中的一个真正的健康端点。浏览器仅检查可能被 WebView、CORS、代理或捕获门户行为隐藏的。

const port = await NetworkDiagnostics.testPort({
host: 'api.example.com',
port: 443,
timeoutMs: 3000,
});
console.log(port.open, port.durationMs);

当 Wi-Fi 接入点阻止非标准端口、MQTT、自定义网关或私有后端时,这很有用,仍允许正常浏览。

测试 WebSocket 连接

标题:测试 WebSocket 连接
const socket = await NetworkDiagnostics.testWebSocket({
url: 'wss://ws.example.com/socket',
timeoutMs: 5000,
});
console.log(socket.open, socket.statusCode);

当代理或捕获门户允许 HTTPS 页面但阻止 WebSocket 升级请求时使用。

测量下载速度

标题:测量下载速度
const speed = await NetworkDiagnostics.testDownloadSpeed({
url: 'https://speed.example.com/5mb.bin',
maxBytes: 5 * 1024 * 1024,
timeoutMs: 30000,
});
console.log(speed.mbps);

使用您自己的静态文件端点,以便结果反映您的应用程序所需的网络路径。

const loss = await NetworkDiagnostics.testPacketLoss({
mode: 'tcp',
host: 'api.example.com',
port: 443,
count: 10,
timeoutMs: 3000,
intervalMs: 250,
});
console.log(loss.lossPercent);

原始 ICMP ping 在 App Store 和 Play Store 应用程序中不可移植。该方法通过重复 TCP 或 HTTP 探测来测量应用程序级别的包丢失。

Web 实现是为开发目的而设计的。浏览器无法打开原始 TCP 套接字,URL 检查可能受 CORS 限制。请使用 iOS 或 Android 构建来获得真实的支持诊断。