smart-home/smart-home-app/README-配置落地完整指南.md
2026-02-26 09:16:34 +08:00

154 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# uni-app配置落地完整指南 ✅
## 🎯 **关键配置修复完成**
感谢你的详细建议!已完成所有关键配置的补充和优化:
### ✅ **1. 完整的Android网络权限**
**文件:** `manifest.json`
```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配置**
**所有网络请求已优化:**
```javascript
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
- ✅ 友好的错误提示和警告
**使用示例:**
```javascript
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` | ⚠️ 受限 | 可能受调试基座版本限制 |
| 请求配置优化 | ✅ 生效 | 代码层面修改 |
**真机调试注意事项:**
1. 关闭HBuilderX的「网络代理」
2. 确保调试基座为最新版本
3. 避免手机端有旧APP残留
### **正式使用(云打包)**
| 项目 | 是否生效 | 注意事项 |
|------|----------|----------|
| 所有配置 | ✅ 完全生效 | 无调试基座限制 |
| `targetSdkVersion` | ✅ 完全生效 | 按配置编译 |
| 网络权限 | ✅ 完全生效 | 完整权限申请 |
**云打包步骤:**
1. 发行 → 原生App - 云打包
2. 选择对应架构abiFilters中的3个
3. 允许手机安装「未知来源应用」
4. 卸载旧APP后安装新包
## 🧪 **测试步骤**
### **第一步:真机调试测试**
1. **清除缓存** - HBuilderX → 运行 → 清除缓存
2. **重新运行** - 运行到手机
3. **测试网络诊断** - 点击"📶 网络诊断"
4. **测试手动输入** - 输入`192.168.1.98`
### **第二步:如果真机调试仍超时**
1. **进行云打包** - 发行 → 原生App - 云打包
2. **安装正式包** - 卸载旧APP安装新APK
3. **重新测试** - 所有配置将完全生效
## 📊 **预期修复效果**
### **网段校验效果**
```
输入: 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校验 | 无 | 智能网段校验 |
| 错误提示 | 简单 | 详细指导 |
## 🎯 **核心修复要点**
1. **权限完整性** - 补充了位置权限获取WiFi信息必需
2. **请求稳定性** - 添加User-Agent、缓存控制等配置
3. **用户体验** - 智能IP校验提前拦截无效输入
4. **调试友好** - 区分真机调试和云打包的差异
现在配置已经完全落地,应该能解决之前的超时问题!🚀