You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.3 KiB
5.3 KiB
人脸验证502错误处理修复
问题描述
在进行人脸验证时,checkOrder
接口返回502错误,导致:
- 系统仍会重试请求(虽然已修复
verifyOrder
接口,但checkOrder
接口未修复) - 人脸识别摄像头预览被暂停,且502错误时未恢复摄像头
- 用户无法看到友好的错误提示
日志分析
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错误的特殊处理:
// 修复前
} 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错误的特殊处理逻辑:
// 当人脸验证返回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;
}
修复效果
修复前的问题
- 重试日志:
服务器错误 502,准备重试 2
- 错误信息: 通用的"网关错误"
- 摄像头状态: 暂停且不恢复
- 用户体验: 等待重试,无友好提示
修复后的效果
- 立即处理: 502错误被
NetworkStabilityManager
立即捕获,不重试 - 友好提示: 显示"服务器暂时不可用,请稍后再试"
- 摄像头恢复: 自动发送恢复摄像头预览的广播
- 用户体验: 即时反馈,摄像头立即恢复可用
处理流程
- 网络层:
NetworkStabilityManager.RetryInterceptor
检测到502错误,立即返回不重试 - 工具层:
NetworkUtils.checkOrder
接收502响应,生成友好错误信息 - 管理层:
OrderVerificationManager
调用错误回调 - 处理层:
OrderVerificationResultHandler
检测到人脸验证502错误 - 界面层: 显示Toast提示
- 广播层: 发送恢复摄像头广播
- 设备层:
OXFaceOnlineActivity
接收广播,调用resumeCamera()
兼容性
- ✅ 保持与现有错误处理逻辑的兼容性
- ✅ 不影响其他验证类型的错误处理
- ✅ 保持303和504错误的原有处理逻辑
- ✅ 向后兼容现有的摄像头控制机制
测试验证
验证点
- 502错误不重试: 检查日志中不再出现"准备重试"信息
- 错误信息友好: Toast显示"服务器暂时不可用,请稍后再试"
- 摄像头恢复: 验证摄像头预览在502错误后能正常恢复
- 其他错误不受影响: 确保303、504等错误的处理不变
预期日志
NetworkStabilityManager: 服务器错误 502 (Bad Gateway),直接返回错误
OrderVerificationResultHandler: 人脸验证返回502,显示Toast并恢复摄像头预览
OrderVerificationResultHandler: 已发送恢复摄像头预览广播
OXFaceOnlineActivity: 接收到恢复摄像头预览广播
总结
通过这次修复,完善了502错误在人脸验证场景下的处理:
- 网络层: 已在 v2.0.2 中修复502错误重试问题
- 业务层: 本次修复502错误的友好提示和摄像头恢复
- 用户体验: 从等待重试改为即时反馈和设备恢复
现在当人脸验证遇到502错误时,用户将看到友好的提示信息,摄像头也会立即恢复预览,提供了更好的用户体验。