优化:字段名兼容性处理

This commit is contained in:
2026-01-27 22:28:13 +08:00
parent d1b2388616
commit f769373da1
16 changed files with 1076 additions and 59 deletions

131
docs/cors-issue-fix.md Normal file
View File

@@ -0,0 +1,131 @@
# 极光SDK跨域问题解决方案
## 问题描述
flux-web 发布后访问极光服务时出现跨域错误。从 `https://abc.1216.top` 发起到 `https://h5.verification.jiguang.cn` 的请求被浏览器阻止。
## 问题原因
极光SDK在初始化时会**直接由浏览器**向 `https://h5.verification.jiguang.cn` 发送请求,这是一个跨域请求。
**重要说明**
- 请求是浏览器直接从H5页面发起到极光服务器的**不经过你的Nginx服务器**
- CORS响应头必须由**被请求的服务器**(极光服务器)返回才有效
- 你的Nginx只能控制自己返回的响应头**无法控制极光服务器的响应头**
- 因此在Nginx中添加CORS响应头对这种情况**完全无效**
如果极光服务器没有为当前域名配置CORS白名单浏览器会阻止这个请求。
## 解决方案
### 方案一:配置极光控制台域名白名单(**唯一有效方案**
这是**唯一有效**的解决方案因为只有极光服务器可以控制它返回的CORS响应头。
1. 登录极光控制台https://www.jiguang.cn/
2. 进入应用管理 → 选择应用 → 一键登录配置
3. 在"Web端配置"中添加允许的域名:
- `abc.1216.top`
- `https://abc.1216.top`(如果需要)
4. 保存配置并等待生效(通常几分钟内)
**为什么这是唯一有效方案**
- 浏览器直接请求极光服务器,不经过你的服务器
- 只有极光服务器配置了域名白名单后,才会在响应头中添加 `Access-Control-Allow-Origin`
- 你的Nginx、后端服务器都无法解决这个问题
### 方案二检查SDK初始化配置
确认 `jverify.service.js` 中的 `domainName` 参数正确设置:
```javascript
window.JVerificationInterface.init({
appkey: appId,
domainName: window.location.origin, // 应该是 https://abc.1216.top
debugMode: debugMode,
// ...
});
```
### 方案三:使用后端代理(不推荐,仅作为备选)
**注意**:此方案**不推荐**,因为:
1. 极光SDK是第三方SDK其内部请求无法被代理
2. SDK初始化时的请求是SDK内部发起的无法修改
3. 即使代理了部分APISDK的其他功能可能仍然失败
如果极光控制台确实不支持域名白名单配置(通常都支持),可以尝试:
1. 在后端添加代理接口(如 `/zcore/jpush/proxy`
2. 修改极光SDK的调用方式**需要修改SDK源码不推荐**
3. 后端转发请求到极光服务器
**强烈建议**:优先使用方案一,在极光控制台配置域名白名单。
### 方案四:检查网络环境
1. 确认服务器网络可以访问 `h5.verification.jiguang.cn`
2. 检查是否有防火墙或安全组规则阻止了请求
3. 确认HTTPS证书配置正确
## 调试步骤
1. **检查浏览器控制台**
- 打开浏览器开发者工具F12
- 查看 Network 标签页
- 找到对 `h5.verification.jiguang.cn` 的请求
- 查看响应头中是否有 `Access-Control-Allow-Origin`
2. **检查请求详情**
- 查看请求的 Referer 是否为 `https://abc.1216.top`
- 查看请求的 Origin 是否为 `https://abc.1216.top`
- 查看响应状态码和错误信息
3. **检查极光SDK初始化日志**
- 查看浏览器控制台中的 `[JVerifyService]` 日志
- 确认 `domainName` 参数的值是否正确
- 确认SDK初始化是否成功
## 常见错误
### 错误1CORS policy blocked
```
Access to XMLHttpRequest at 'https://h5.verification.jiguang.cn/...'
from origin 'https://abc.1216.top' has been blocked by CORS policy
```
**解决方法**:在极光控制台配置域名白名单
### 错误2Network Error
```
Network Error: Failed to fetch
```
**解决方法**:检查网络连接和防火墙配置
### 错误3SDK初始化失败
```
[JVerifyService] 极光SDK初始化失败
```
**解决方法**:检查 `domainName` 参数和 AppKey 配置
## 验证方法
配置完成后,按以下步骤验证:
1. 清除浏览器缓存
2. 重新访问页面
3. 打开浏览器控制台,查看是否有跨域错误
4. 检查极光SDK是否成功初始化
5. 测试一键登录功能是否正常
## 相关文件
- `src/js/services/jverify.service.js` - 极光SDK服务
- `src/js/pages/index.page.js` - 主页面(包含一键登录初始化)
- `nginx.conf.example` - Nginx配置示例
## 注意事项
1. 极光控制台的域名白名单配置可能需要几分钟才能生效
2. 确保配置的域名与访问域名完全一致(包括协议 http/https
3. 如果使用CDN可能需要同时配置CDN域名
4. 某些浏览器如Safari对CORS有更严格的限制