154 lines
5.3 KiB
Markdown
154 lines
5.3 KiB
Markdown
# 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. **调试友好** - 区分真机调试和云打包的差异
|
||
|
||
现在配置已经完全落地,应该能解决之前的超时问题!🚀
|