3 changed files with 162 additions and 2 deletions
-
26app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java
-
4app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java
-
134人脸验证502错误处理修复说明.md
@ -0,0 +1,134 @@ |
|||
# 人脸验证502错误处理修复 |
|||
|
|||
## 问题描述 |
|||
在进行人脸验证时,`checkOrder` 接口返回502错误,导致: |
|||
1. 系统仍会重试请求(虽然已修复 `verifyOrder` 接口,但 `checkOrder` 接口未修复) |
|||
2. 人脸识别摄像头预览被暂停,且502错误时未恢复摄像头 |
|||
3. 用户无法看到友好的错误提示 |
|||
|
|||
## 日志分析 |
|||
``` |
|||
2025-09-10 18:22:24.067 NetworkStabilityManager: 服务器错误 502,准备重试 2 |
|||
``` |
|||
|
|||
这表明 `checkOrder` 接口的502错误仍然进入了重试逻辑。 |
|||
|
|||
## 修复方案 |
|||
|
|||
### 1. NetworkUtils.checkOrder 502错误处理优化 |
|||
|
|||
**文件**: `c:\Users\mate1\Desktop\CODE\Android\oxFaceAndroid\app\src\main\java\com\ouxuan\oxface\network\utils\NetworkUtils.java` |
|||
|
|||
**问题**: `checkOrder` 接口缺少针对502错误的友好提示,只使用通用的HTTP错误信息。 |
|||
|
|||
**修复**: 在 `checkOrder` 方法的错误处理中添加502错误的特殊处理: |
|||
|
|||
```java |
|||
// 修复前 |
|||
} else { |
|||
// 处理HTTP错误状态码,如404、500等 |
|||
String errorMessage = getHttpErrorMessage(response.code()); |
|||
android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); |
|||
callback.onError(response.code(), errorMessage); |
|||
} |
|||
|
|||
// 修复后 |
|||
} else { |
|||
// 处理HTTP错误状态码,如404、500等 |
|||
String errorMessage = getHttpErrorMessage(response.code()); |
|||
if (response.code() == 502) { |
|||
// 对于502错误,提供更具体的说明 |
|||
errorMessage = "服务器暂时不可用,请稍后再试"; |
|||
} |
|||
android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); |
|||
callback.onError(response.code(), errorMessage); |
|||
} |
|||
``` |
|||
|
|||
### 2. OrderVerificationResultHandler 502错误的摄像头恢复处理 |
|||
|
|||
**文件**: `c:\Users\mate1\Desktop\CODE\Android\oxFaceAndroid\app\src\main\java\com\ouxuan\oxface\network\OrderVerificationResultHandler.java` |
|||
|
|||
**问题**: 只有303和504错误会恢复摄像头预览,502错误没有恢复摄像头的处理。 |
|||
|
|||
**修复**: 添加502错误的特殊处理逻辑: |
|||
|
|||
```java |
|||
// 当人脸验证返回502错误时,显示Toast并恢复摄像头预览 |
|||
if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && errorCode == 502) { |
|||
LogManager.logInfo(TAG, "人脸验证返回502,显示Toast并恢复摄像头预览"); |
|||
|
|||
// 显示友好的错误提示 |
|||
String displayMessage = getDisplayErrorMessage(errorCode, errorMessage); |
|||
if (listener != null) { |
|||
listener.showToast(displayMessage != null && !displayMessage.isEmpty() ? displayMessage : "服务器暂时不可用,请稍后再试"); |
|||
} |
|||
|
|||
// 发送广播通知OXFaceOnlineActivity恢复摄像头预览 |
|||
try { |
|||
Intent intent = new Intent("com.ouxuan.oxface.ACTION_RESUME_CAMERA"); |
|||
context.sendBroadcast(intent); |
|||
LogManager.logInfo(TAG, "已发送恢复摄像头预览广播"); |
|||
} catch (Exception e) { |
|||
LogManager.logError(TAG, "发送恢复摄像头预览广播失败", e); |
|||
} |
|||
|
|||
return; |
|||
} |
|||
``` |
|||
|
|||
## 修复效果 |
|||
|
|||
### 修复前的问题 |
|||
1. **重试日志**: `服务器错误 502,准备重试 2` |
|||
2. **错误信息**: 通用的"网关错误" |
|||
3. **摄像头状态**: 暂停且不恢复 |
|||
4. **用户体验**: 等待重试,无友好提示 |
|||
|
|||
### 修复后的效果 |
|||
1. **立即处理**: 502错误被 `NetworkStabilityManager` 立即捕获,不重试 |
|||
2. **友好提示**: 显示"服务器暂时不可用,请稍后再试" |
|||
3. **摄像头恢复**: 自动发送恢复摄像头预览的广播 |
|||
4. **用户体验**: 即时反馈,摄像头立即恢复可用 |
|||
|
|||
## 处理流程 |
|||
|
|||
1. **网络层**: `NetworkStabilityManager.RetryInterceptor` 检测到502错误,立即返回不重试 |
|||
2. **工具层**: `NetworkUtils.checkOrder` 接收502响应,生成友好错误信息 |
|||
3. **管理层**: `OrderVerificationManager` 调用错误回调 |
|||
4. **处理层**: `OrderVerificationResultHandler` 检测到人脸验证502错误 |
|||
5. **界面层**: 显示Toast提示 |
|||
6. **广播层**: 发送恢复摄像头广播 |
|||
7. **设备层**: `OXFaceOnlineActivity` 接收广播,调用 `resumeCamera()` |
|||
|
|||
## 兼容性 |
|||
|
|||
- ✅ 保持与现有错误处理逻辑的兼容性 |
|||
- ✅ 不影响其他验证类型的错误处理 |
|||
- ✅ 保持303和504错误的原有处理逻辑 |
|||
- ✅ 向后兼容现有的摄像头控制机制 |
|||
|
|||
## 测试验证 |
|||
|
|||
### 验证点 |
|||
1. **502错误不重试**: 检查日志中不再出现"准备重试"信息 |
|||
2. **错误信息友好**: Toast显示"服务器暂时不可用,请稍后再试" |
|||
3. **摄像头恢复**: 验证摄像头预览在502错误后能正常恢复 |
|||
4. **其他错误不受影响**: 确保303、504等错误的处理不变 |
|||
|
|||
### 预期日志 |
|||
``` |
|||
NetworkStabilityManager: 服务器错误 502 (Bad Gateway),直接返回错误 |
|||
OrderVerificationResultHandler: 人脸验证返回502,显示Toast并恢复摄像头预览 |
|||
OrderVerificationResultHandler: 已发送恢复摄像头预览广播 |
|||
OXFaceOnlineActivity: 接收到恢复摄像头预览广播 |
|||
``` |
|||
|
|||
## 总结 |
|||
|
|||
通过这次修复,完善了502错误在人脸验证场景下的处理: |
|||
1. **网络层**: 已在 v2.0.2 中修复502错误重试问题 |
|||
2. **业务层**: 本次修复502错误的友好提示和摄像头恢复 |
|||
3. **用户体验**: 从等待重试改为即时反馈和设备恢复 |
|||
|
|||
现在当人脸验证遇到502错误时,用户将看到友好的提示信息,摄像头也会立即恢复预览,提供了更好的用户体验。 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue