
- 修改Package.swift以支持iOS 15和macOS 12。 - 更新swift-tca-architecture-guidelines.mdc中的alwaysApply设置为false。 - 注释掉AppDelegate中的NIMSDK导入,移除不再使用的NIMConfigurationManager和NIMSessionManager文件。 - 添加新的API相关文件,包括EMailLoginFeature、IDLoginFeature和相关视图,增强登录功能。 - 更新APIConstants和APIEndpoints以反映新的API路径。 - 添加本地化支持文件,包含英文和中文简体的本地化字符串。 - 新增字体管理和安全工具类,支持AES和DES加密。 - 更新Xcode项目配置,调整版本号和启动画面设置。
181 lines
6.4 KiB
Markdown
181 lines
6.4 KiB
Markdown
# YuMi iOS 项目 API 请求配置分析
|
|
|
|
## 📋 目录
|
|
- [主机地址配置](#主机地址配置)
|
|
- [网络基础配置](#网络基础配置)
|
|
- [自定义HTTP Headers](#自定义http-headers)
|
|
- [默认请求参数](#默认请求参数)
|
|
- [安全签名机制](#安全签名机制)
|
|
- [请求内容类型](#请求内容类型)
|
|
- [SSL安全配置](#ssl安全配置)
|
|
- [特殊功能](#特殊功能)
|
|
- [应用信息配置](#应用信息配置)
|
|
|
|
## 🌐 主机地址配置
|
|
|
|
| 环境 | 地址 | 说明 |
|
|
|------|------|------|
|
|
| 生产环境 | `https://api.epartylive.com` | 正式服务器 |
|
|
| 测试环境 | `http://beta.api.molistar.xyz` | 开发测试服务器 |
|
|
| 图片服务 | `https://image.hfighting.com` | 静态资源服务器 |
|
|
|
|
**环境切换机制:**
|
|
- 通过 `kIsProductionEnvironment` 用户偏好设置控制
|
|
- DEBUG 模式下可动态切换环境
|
|
- 发布版本强制使用生产环境
|
|
|
|
## 🔧 网络基础配置
|
|
|
|
```objective-c
|
|
// AFHTTPSessionManager 优化配置
|
|
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
configuration.HTTPShouldUsePipelining = YES; // 启用 HTTP/2 pipelining
|
|
configuration.HTTPMaximumConnectionsPerHost = 15; // 提升并发连接数到15
|
|
|
|
// 超时设置
|
|
manager.requestSerializer.timeoutInterval = 60; // 默认超时60秒
|
|
manager.requestSerializer.HTTPShouldHandleCookies = YES; // 启用Cookie处理
|
|
```
|
|
|
|
## 📋 自定义HTTP Headers
|
|
|
|
### 认证相关 Headers
|
|
| Header 名称 | 值来源 | 说明 |
|
|
|-------------|--------|------|
|
|
| `pub_uid` | `[AccountInfoStorage instance].getUid` | 用户唯一标识符 |
|
|
| `pub_ticket` | `[AccountInfoStorage instance].getTicket` | 用户身份认证票据 |
|
|
| `Accept-Language` | `[NSBundle uploadLanguageText]` | 用户语言偏好 |
|
|
| `App-Version` | `PI_App_Version` | 应用版本号 (1.0.28.1) |
|
|
|
|
### 压缩相关 Headers
|
|
| Header 名称 | 值 | 说明 |
|
|
|-------------|-----|------|
|
|
| `Accept-Encoding` | `"gzip, br"` | 支持 gzip 和 Brotli 压缩 |
|
|
| `Content-Encoding` | `"gzip"` | POST 请求数据压缩 |
|
|
| `Content-Type` | `"application/json; charset=UTF-8"` | 特殊接口使用 |
|
|
|
|
## 🎯 默认请求参数
|
|
|
|
每个 API 请求都会自动添加以下基础参数:
|
|
|
|
```objective-c
|
|
NSDictionary *defaultBasciParame = @{
|
|
@"Accept-Language": [NSBundle uploadLanguageText], // 界面语言
|
|
@"os": @"iOS", // 操作系统类型
|
|
@"osVersion": [YYUtility systemVersion], // 系统版本号
|
|
@"netType": ([YYUtility networkStatus] == ReachableViaWiFi) ? @2 : @1, // 网络类型
|
|
@"ispType": @([YYUtility carrierIdentifier]), // 运营商类型
|
|
@"channel": [YYUtility getAppSource] ?: @"", // 应用分发渠道
|
|
@"model": [YYUtility modelType], // 设备型号
|
|
@"deviceId": [YYUtility deviceUniqueIdentification], // 设备唯一标识
|
|
@"appVersion": [YYUtility appVersion], // 应用版本
|
|
@"app": [YYUtility appName], // 应用名称
|
|
@"lang": [YYUtility getLanguage], // 语言代码
|
|
@"mcc": [YYUtility getMobileCountryCode] // 移动国家代码(条件性添加)
|
|
};
|
|
```
|
|
|
|
### 参数说明
|
|
- **netType**: WiFi=2, 蜂窝网络=1
|
|
- **channel**: 默认 "appstore",支持 "TestFlight"
|
|
- **mcc**: 移动国家代码,值为 "65535" 时不添加
|
|
|
|
## 🔐 安全签名机制
|
|
|
|
### 签名生成流程
|
|
1. **参数过滤**: 移除系统级参数
|
|
```objective-c
|
|
// 被移除的参数
|
|
@[@"Accept-Language", @"pub_uid", @"appVersion", @"appVersionCode",
|
|
@"channel", @"deviceId", @"ispType", @"netType", @"os",
|
|
@"osVersion", @"app", @"ticket", @"client", @"lang", @"mcc"]
|
|
```
|
|
|
|
2. **参数排序**: 按字典 key 升序排序
|
|
|
|
3. **字符串拼接**: `"key0=value0&key1=value1&key2=value2"`
|
|
|
|
4. **添加密钥**: 拼接 `key=PARAMSSECRET`
|
|
|
|
5. **MD5加密**: 生成大写 MD5 签名
|
|
|
|
6. **添加签名**: 以 `pub_sign` 参数名添加到请求中
|
|
|
|
## 📊 请求内容类型
|
|
|
|
支持的响应内容类型:
|
|
```objective-c
|
|
@"application/json" // 主要 JSON 响应
|
|
@"text/json" // JSON 文本格式
|
|
@"text/javascript" // JavaScript 格式
|
|
@"text/html" // HTML 响应
|
|
@"text/plain" // 纯文本
|
|
@"image/jpeg" // JPEG 图片
|
|
@"image/png" // PNG 图片
|
|
```
|
|
|
|
## 🛡️ SSL安全配置
|
|
|
|
```objective-c
|
|
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
|
|
manager.securityPolicy.allowInvalidCertificates = NO; // 不允许无效证书
|
|
manager.securityPolicy.validatesDomainName = YES; // 验证域名
|
|
```
|
|
|
|
## ⚡ 特殊功能
|
|
|
|
### 1. 网络状态检测
|
|
- 自动检测网络连接状态
|
|
- 离线时立即返回失败回调
|
|
- 避免无效请求
|
|
|
|
### 2. 动态超时设置
|
|
```objective-c
|
|
// 通过参数动态设置超时时间
|
|
@{@"NeedChangeTimeOut": @30} // 设置30秒超时
|
|
```
|
|
|
|
### 3. 数据压缩
|
|
- POST 请求自动进行 Gzip 压缩
|
|
- 减少网络传输数据量
|
|
- 提升请求效率
|
|
|
|
### 4. 错误追踪
|
|
- 集成 Bugly 错误上报
|
|
- 5xx 错误自动上报
|
|
- 包含调用堆栈信息
|
|
|
|
### 5. 参数解码
|
|
- `MSParamsDecode` 处理参数加密
|
|
- 自动生成安全签名
|
|
- 保护 API 请求安全
|
|
|
|
## 📱 应用信息配置
|
|
|
|
| 配置项 | 值 | 说明 |
|
|
|--------|-----|------|
|
|
| 应用版本 | `1.0.28.1` | 内置版本号 |
|
|
| 默认渠道 | `appstore` | App Store 渠道 |
|
|
| 测试渠道 | `TestFlight` | TestFlight 测试 |
|
|
| 图片域名 | `https://image.hfighting.com` | 静态资源服务 |
|
|
|
|
## 🏗️ 架构特点
|
|
|
|
1. **统一管理**: `HttpRequestHelper` 类统一管理所有网络请求
|
|
2. **模块化**: API 接口按功能模块分类 (`Api+Mine`, `Api+DressUp` 等)
|
|
3. **安全性**: 多层安全机制保护 API 调用
|
|
4. **性能优化**: HTTP/2 支持、连接复用、数据压缩
|
|
5. **错误处理**: 完善的错误处理和上报机制
|
|
6. **环境切换**: 支持开发和生产环境无缝切换
|
|
|
|
## 📝 总结
|
|
|
|
YuMi iOS 项目的 API 架构设计了完整的网络请求体系,包含:
|
|
- 🔐 **安全机制**: 用户认证、参数签名、SSL验证
|
|
- 📊 **设备信息**: 完整的设备和应用信息收集
|
|
- ⚡ **性能优化**: HTTP/2、连接池、数据压缩
|
|
- 🛠️ **开发支持**: 环境切换、错误追踪、调试日志
|
|
- 🏗️ **架构清晰**: 模块化设计、统一管理、易于维护
|
|
|
|
这种设计确保了 API 请求的安全性、稳定性和高性能,为应用提供了可靠的网络服务基础。
|