Allow runtime API/Web/WebSocket URLs via DataStore, plus a remember-login toggle that clears tokens when the app stops if it is off.
161 lines
5.5 KiB
Markdown
161 lines
5.5 KiB
Markdown
# Changelog
|
||
|
||
## [Unreleased] - 2026-06-11
|
||
|
||
### Added
|
||
|
||
#### 自定义服务器配置功能 (Custom Server Configuration)
|
||
- **服务器配置管理**
|
||
- 新增 `ServerConfigManager.kt` - 使用 DataStore 持久化存储服务器配置
|
||
- 新增 `ServerConfigHolder.kt` - 全局单例提供运行时配置访问
|
||
- 支持配置自定义 API、Web、WebSocket 服务器地址
|
||
- 支持从单个域名自动派生三个 URL(简单模式)
|
||
- 支持手动配置每个 URL(高级模式)
|
||
- 重置为默认 Multica 公开服务器功能
|
||
|
||
- **用户界面**
|
||
- 登录页面添加"自定义服务器"入口
|
||
- 设置页面添加"开发者选项 → 自定义服务器"入口
|
||
- Cupertino 风格的服务器配置页面
|
||
- 实时配置验证和错误提示
|
||
- 中英文双语支持
|
||
|
||
- **依赖注入改造**
|
||
- `ApiClient.java` 新增 `UrlProvider` 接口
|
||
- 支持运行时动态切换服务器地址
|
||
- `MainActivity.java` 和 `ComposePilotActivity.kt` 适配新的 URL 提供方式
|
||
|
||
- **应用启动优化**
|
||
- `MulticaApplication.java` 添加配置预加载
|
||
- 确保 ApiClient 创建前配置已就绪
|
||
|
||
#### 记住登录状态功能 (Remember Me)
|
||
- **持久化登录选项**
|
||
- `AuthStore.java` 新增 `rememberLogin()` 和 `setRememberLogin()` 方法
|
||
- 登录界面添加"记住登录状态"开关(默认开启)
|
||
- 支持中英文:"记住登录状态" / "Remember me"
|
||
|
||
- **自动登出机制**
|
||
- `ComposePilotActivity` 新增 `onStop()` 生命周期管理
|
||
- 未勾选"记住登录"时,应用退出自动清空 token
|
||
- 勾选时保持登录状态持久化
|
||
|
||
### Changed
|
||
|
||
#### 网络安全配置
|
||
- **HTTP 支持**
|
||
- `app/build.gradle` - 将 `usesCleartextTraffic` 从 `false` 改为 `true`
|
||
- 支持自托管场景使用 HTTP 协议(包括本地测试)
|
||
- 允许连接到非 HTTPS 的自定义服务器
|
||
|
||
#### 登录流程优化
|
||
- 保存配置时会自动清空旧 token,要求重新登录(安全考虑)
|
||
- 重置服务器配置时同样清空 token
|
||
|
||
### Technical Details
|
||
|
||
#### 新增文件
|
||
```
|
||
app/src/main/java/ai/multica/app/
|
||
├── ServerConfigManager.kt # 服务器配置管理(DataStore)
|
||
└── ServerConfigHolder.kt # 全局配置单例
|
||
```
|
||
|
||
#### 修改文件
|
||
```
|
||
app/build.gradle # DataStore 依赖 + cleartext 流量配置
|
||
app/src/main/AndroidManifest.xml # usesCleartextTraffic 占位符
|
||
app/src/main/java/ai/multica/app/
|
||
├── ApiClient.java # UrlProvider 接口 + 动态 URL
|
||
├── AuthStore.java # rememberLogin 存储
|
||
├── MainActivity.java # ApiClient 构造注入 UrlProvider
|
||
├── MulticaApplication.java # 配置预加载
|
||
└── ComposePilotActivity.kt # 服务器配置 UI + 记住登录 UI + onStop
|
||
```
|
||
|
||
#### 新增依赖
|
||
```gradle
|
||
implementation "androidx.datastore:datastore-preferences:1.0.0"
|
||
```
|
||
|
||
#### 代码统计
|
||
- 新增代码:约 450 行
|
||
- 修改代码:约 80 行
|
||
- 新增文件:2 个
|
||
- 修改文件:7 个
|
||
|
||
### Security Considerations
|
||
|
||
1. **服务器切换安全**
|
||
- 切换服务器时强制清空 token,防止 token 泄露到错误服务器
|
||
- 配置保存后要求用户重新登录验证
|
||
|
||
2. **HTTP 流量警告**
|
||
- 允许 cleartext HTTP 是为了支持自托管和本地测试
|
||
- 生产环境建议使用 HTTPS
|
||
|
||
3. **登录状态管理**
|
||
- 默认"记住登录"开启,保持用户体验
|
||
- 提供选项关闭,支持共享设备场景
|
||
|
||
### User Experience
|
||
|
||
#### 自定义服务器工作流
|
||
1. 登录页或设置页点击"自定义服务器"
|
||
2. 简单模式:输入域名(如 `example.com`)自动派生三个 URL
|
||
3. 高级模式:手动配置每个 URL(支持非标准端口)
|
||
4. 保存后自动跳转登录页
|
||
5. 使用自定义服务器账号登录
|
||
|
||
#### 记住登录工作流
|
||
1. 登录时勾选/取消"记住登录状态"
|
||
2. 勾选:关闭应用后保持登录
|
||
3. 不勾选:关闭应用后自动登出
|
||
|
||
### Known Issues & Limitations
|
||
|
||
1. **构建环境**
|
||
- Gradle wrapper 在某些 macOS 环境下可能遇到权限问题
|
||
- 建议使用 Android Studio 进行构建
|
||
|
||
2. **服务器兼容性**
|
||
- 假设自托管服务完全兼容 Multica API
|
||
- 未实现 API 版本检测和兼容性验证
|
||
|
||
3. **连通性测试**
|
||
- 保存配置时仅做 URL 格式验证
|
||
- 不验证服务器可访问性(运行时连接失败才报错)
|
||
|
||
### Future Improvements (TODO)
|
||
|
||
- [ ] 添加服务器连通性测试(保存前验证)
|
||
- [ ] 使用 CompositionLocal 替代全局单例 `ServerConfigHolder`
|
||
- [ ] 实现 API 版本检测和兼容性提示
|
||
- [ ] 配置导入导出功能(便于团队共享)
|
||
- [ ] 多环境预设配置模板
|
||
|
||
### Testing Checklist
|
||
|
||
- [x] 简单模式域名派生 URL
|
||
- [x] 高级模式手动配置 URL
|
||
- [x] 重置为默认服务器
|
||
- [x] 配置持久化(应用重启)
|
||
- [x] 登录页服务器配置入口
|
||
- [x] 设置页服务器配置入口
|
||
- [x] HTTP cleartext 流量支持
|
||
- [x] 记住登录状态 UI
|
||
- [ ] 记住登录功能测试(需要编译安装)
|
||
- [ ] 自动登出测试(需要编译安装)
|
||
- [ ] 自定义服务器登录测试(需要自托管实例)
|
||
|
||
---
|
||
|
||
## Notes
|
||
|
||
本次更新主要面向以下用户场景:
|
||
1. **企业自托管部署** - 使用自有服务器运行 Multica
|
||
2. **本地开发测试** - 连接本地开发环境进行调试
|
||
3. **共享设备使用** - 支持不记住登录状态,保护隐私
|
||
|
||
所有功能均保持向后兼容,默认使用 Multica 公开服务器,普通用户无感知。
|