# 🌐 域名配置指南 ## 📍 域名配置位置 域名配置主要在以下文件中: ``` lib/app/common/app_config.dart ├── KRDomain 类 - 域名管理 │ ├── kr_baseDomains - 主域名列表 │ ├── kr_currentDomain - 当前域名 │ ├── kr_backupDomainUrls - 备用域名获取地址 │ └── kr_localBackupDomains - 本地备用域名 └── AppConfig 类 - 应用配置 └── baseUrl - 动态生成的API地址 ``` ## 🔧 域名配置详解 ### 1. 主域名列表配置 ```dart // 文件: lib/app/common/app_config.dart class KRDomain { // 主域名列表 - 应用会按顺序尝试这些域名 static List kr_baseDomains = [ "apicn.bearvpn.top", // 主域名1 "apibear.nsdsox.com" // 主域名2 ]; } ``` **修改方法:** 1. 将 `"apicn.bearvpn.top"` 替换为您的API服务器域名 2. 将 `"apibear.nsdsox.com"` 替换为您的备用API服务器域名 3. 可以添加更多域名,应用会按顺序尝试 ### 2. 当前域名配置 ```dart // 当前使用的域名 static String kr_currentDomain = "apicn.bearvpn.top"; ``` **修改方法:** - 将 `"apicn.bearvpn.top"` 替换为您希望应用启动时使用的默认域名 - 通常设置为 `kr_baseDomains` 列表中的第一个域名 ### 3. 备用域名获取地址 ```dart // 备用域名获取地址列表 static List kr_backupDomainUrls = [ "https://bear-1347601445.cos.ap-guangzhou.myqcloud.com/bear.txt", "https://getbr.oss-cn-shanghai.aliyuncs.com/bear.txt", "https://gitee.com/karelink/getbr/raw/master/README.en.md", "https://configfortrans.oss-cn-guangzhou.aliyuncs.com/bear/bear.txt", ]; ``` **修改方法:** - 将这些URL替换为您自己的备用域名获取地址 - 这些地址应该返回包含可用域名列表的JSON数据 - 格式示例:`["api1.yourcompany.com", "api2.yourcompany.com"]` ### 4. 本地备用域名 ```dart // 本地备用域名列表(当服务器获取的域名都不可用时使用) static List kr_localBackupDomains = [ "api.omntech.com", "api6.omntech.com", "api7.omntech.com", "apicn.bearvpn.top", "apibear.nsdsox.com", ]; ``` **修改方法:** - 将这些域名替换为您自己的备用域名 - 这些是最后的兜底方案,当所有其他方式都失败时使用 ## 🚀 域名切换机制 ### 自动域名切换流程 1. **应用启动时**:使用 `kr_currentDomain` 作为默认域名 2. **主域名检测**:按顺序检测 `kr_baseDomains` 中的域名 3. **备用域名获取**:如果主域名都不可用,从 `kr_backupDomainUrls` 获取新域名 4. **本地备用**:如果备用域名获取失败,使用 `kr_localBackupDomains` 5. **兜底方案**:如果所有域名都失败,使用硬编码的兜底域名 ### 域名检测逻辑 ```dart // 域名可用性检测 static Future kr_checkDomainAvailability(String domain) async { // 发送HTTPS请求检测域名是否可用 // 只要能够连接就认为域名可用(包括404、403等状态码) } ``` ## 📝 配置示例 ### 示例1:使用自己的API服务器 ```dart class KRDomain { // 主域名列表 static List kr_baseDomains = [ "api.yourcompany.com", // 主API服务器 "backup-api.yourcompany.com" // 备用API服务器 ]; // 当前使用的域名 static String kr_currentDomain = "api.yourcompany.com"; // 备用域名获取地址 static List kr_backupDomainUrls = [ "https://your-cdn.com/domains.json", "https://backup-server.com/api/domains" ]; // 本地备用域名 static List kr_localBackupDomains = [ "api.yourcompany.com", "backup-api.yourcompany.com", "emergency-api.yourcompany.com" ]; } ``` ### 示例2:使用多个备用服务器 ```dart class KRDomain { // 主域名列表 static List kr_baseDomains = [ "api1.yourcompany.com", "api2.yourcompany.com", "api3.yourcompany.com" ]; // 当前使用的域名 static String kr_currentDomain = "api1.yourcompany.com"; // 备用域名获取地址 static List kr_backupDomainUrls = [ "https://cdn1.yourcompany.com/domains.txt", "https://cdn2.yourcompany.com/domains.txt", "https://github.com/yourcompany/domains/raw/main/domains.json" ]; // 本地备用域名 static List kr_localBackupDomains = [ "api1.yourcompany.com", "api2.yourcompany.com", "api3.yourcompany.com", "fallback.yourcompany.com" ]; } ``` ## 🔍 调试域名配置 ### 查看当前域名状态 ```dart // 在应用中使用以下代码查看域名状态 print('当前域名: ${KRDomain.kr_currentDomain}'); print('主域名列表: ${KRDomain.kr_baseDomains}'); print('API地址: ${AppConfig.getInstance().baseUrl}'); ``` ### 手动触发域名切换 ```dart // 手动触发域名切换 bool success = await KRDomain.kr_triggerFastSwitch(); if (success) { print('域名切换成功: ${KRDomain.kr_currentDomain}'); } else { print('域名切换失败'); } ``` ### 测试域名可用性 ```dart // 测试特定域名的可用性 bool isAvailable = await KRDomain.kr_checkDomainAvailability("api.yourcompany.com"); print('域名可用性: $isAvailable'); ``` ## ⚠️ 注意事项 1. **域名格式**:确保域名格式正确,不要包含协议前缀(如 `https://`) 2. **备用地址**:备用域名获取地址应该返回有效的JSON格式数据 3. **测试**:修改域名后,建议在测试环境中验证配置是否正确 4. **缓存**:域名检测结果会被缓存,修改后可能需要重启应用 5. **网络**:确保所有配置的域名都能正常访问 ## 🆘 常见问题 ### Q: 如何添加新的API域名? A: 在 `kr_baseDomains` 列表中添加新的域名即可。 ### Q: 如何修改备用域名获取地址? A: 修改 `kr_backupDomainUrls` 列表,确保地址返回有效的域名列表JSON。 ### Q: 域名切换不生效怎么办? A: 检查域名格式是否正确,确保域名可以正常访问,必要时重启应用。 ### Q: 如何禁用自动域名切换? A: 将 `kr_baseDomains` 设置为只包含一个域名,并确保该域名始终可用。 --- **💡 提示**: 修改域名配置后,建议运行 `flutter clean && flutter pub get` 重新构建项目。