5.3 KiB
5.3 KiB
uni-app配置落地完整指南 ✅
🎯 关键配置修复完成
感谢你的详细建议!已完成所有关键配置的补充和优化:
✅ 1. 完整的Android网络权限
文件: manifest.json
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.INTERNET\"/>", // 核心:允许网络访问
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", // 允许获取WiFi状态
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", // 允许修改WiFi状态
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", // 允许获取网络状态
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", // 允许修改网络状态
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", // 获取WiFi信息需要
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>" // 获取WiFi信息需要
],
"abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"],
"targetSdkVersion": 28,
"minSdkVersion": 21,
"usesCleartextTraffic": true
}
关键权限说明:
INTERNET- 网络访问基础权限ACCESS_WIFI_STATE- 判断是否在局域网ACCESS_*_LOCATION- Android 6+获取WiFi信息必需
✅ 2. 强化的uni.request配置
所有网络请求已优化:
uni.request({
url: testUrl,
method: 'GET',
timeout: 10000, // 延长到10秒
header: {
'Content-Type': 'application/json',
'User-Agent': 'uni-app/ESP32Client', // 避免设备拦截无标识请求
'Cache-Control': 'no-cache', // 关闭缓存,避免读取旧响应
'Connection': 'keep-alive' // 保持连接,提升成功率
},
sslVerify: false, // 关闭SSL验证
withCredentials: false // 关闭跨域凭证
})
✅ 3. ESP32网段校验逻辑
新增智能IP校验:
- ✅ IP格式验证(0-255范围检查)
- ✅ ESP32网段识别(192.168.1.x优先)
- ✅ 局域网网段支持(192.168.x.x, 10.x.x.x, 172.16-31.x.x)
- ✅ 友好的错误提示和警告
使用示例:
const subnetCheck = checkEsp32Subnet('192.168.1.98')
// 返回: { success: true, message: "IP 192.168.1.98 在ESP32网段,可发起通信" }
✅ 4. 集成到设备发现流程
- ✅ 手动输入IP前自动校验网段
- ✅ 提供"仍要尝试"选项(用户可强制测试)
- ✅ 网段警告提示(非192.168.1.x网段)
- ✅ 详细的错误说明和修复建议
🚀 真机调试 vs 云打包差异
快速验证配置(真机调试)
| 项目 | 是否生效 | 注意事项 |
|---|---|---|
usesCleartextTraffic |
✅ 生效 | 调试基座支持 |
| 网络权限 | ✅ 生效 | 调试基座已包含 |
targetSdkVersion |
⚠️ 受限 | 可能受调试基座版本限制 |
| 请求配置优化 | ✅ 生效 | 代码层面修改 |
真机调试注意事项:
- 关闭HBuilderX的「网络代理」
- 确保调试基座为最新版本
- 避免手机端有旧APP残留
正式使用(云打包)
| 项目 | 是否生效 | 注意事项 |
|---|---|---|
| 所有配置 | ✅ 完全生效 | 无调试基座限制 |
targetSdkVersion |
✅ 完全生效 | 按配置编译 |
| 网络权限 | ✅ 完全生效 | 完整权限申请 |
云打包步骤:
- 发行 → 原生App - 云打包
- 选择对应架构(abiFilters中的3个)
- 允许手机安装「未知来源应用」
- 卸载旧APP后安装新包
🧪 测试步骤
第一步:真机调试测试
- 清除缓存 - HBuilderX → 运行 → 清除缓存
- 重新运行 - 运行到手机
- 测试网络诊断 - 点击"📶 网络诊断"
- 测试手动输入 - 输入
192.168.1.98
第二步:如果真机调试仍超时
- 进行云打包 - 发行 → 原生App - 云打包
- 安装正式包 - 卸载旧APP,安装新APK
- 重新测试 - 所有配置将完全生效
📊 预期修复效果
网段校验效果
输入: 192.168.1.98
✅ IP 192.168.1.98 在ESP32网段(192.168.1.x),可发起通信
输入: 10.0.0.100
⚠️ IP 10.0.0.100 在局域网网段,可尝试通信(注意:ESP32通常在192.168.1.x)
输入: 8.8.8.8
❌ IP 8.8.8.8 不在局域网网段,无法访问ESP32设备
网络请求效果
📶 当前网络类型: wifi
🔍 测试接口: http://192.168.1.98:80/api/device/info
✅ HTTP连接成功: /api/device/info
✅ 设备连接成功!
💡 关键配置对比
| 配置项 | 修复前 | 修复后 |
|---|---|---|
| Android权限 | 不完整 | 7个完整权限 |
| 请求超时 | 3秒 | 10秒 |
| 请求头 | 基础 | 5个优化配置 |
| IP校验 | 无 | 智能网段校验 |
| 错误提示 | 简单 | 详细指导 |
🎯 核心修复要点
- 权限完整性 - 补充了位置权限(获取WiFi信息必需)
- 请求稳定性 - 添加User-Agent、缓存控制等配置
- 用户体验 - 智能IP校验,提前拦截无效输入
- 调试友好 - 区分真机调试和云打包的差异
现在配置已经完全落地,应该能解决之前的超时问题!🚀