# 权限和网络安全配置指南 ## 问题描述 如果遇到 "DocsAPI 未加载成功" 错误,即使服务器可以访问,通常是因为 Android/iOS 的网络安全策略阻止了 WebView 加载外部资源。 ## Android 配置 ### 1. AndroidManifest.xml 确保在 `android/app/src/main/AndroidManifest.xml` 中添加了以下配置: ```xml ... ``` ### 2. network_security_config.xml 创建文件 `android/app/src/main/res/xml/network_security_config.xml`: ```xml localhost 10.0.2.2 ``` ### 3. 目录结构 确保目录结构正确: ``` android/app/src/main/res/ └── xml/ └── network_security_config.xml ``` ## iOS 配置 ### Info.plist 在 `ios/Runner/Info.plist` 中添加: ```xml NSAppTransportSecurity NSAllowsArbitraryLoads ``` 或者只允许特定域名(更安全): ```xml NSAppTransportSecurity NSExceptionDomains document.23544.com NSIncludesSubdomains NSExceptionAllowsInsecureHTTPLoads ``` ## 验证配置 ### 1. 检查文件是否存在 **Android**: ```bash ls -la example/android/app/src/main/res/xml/network_security_config.xml ``` **iOS**: ```bash grep -A 5 "NSAppTransportSecurity" example/ios/Runner/Info.plist ``` ### 2. 重新构建应用 配置更改后,需要完全重新构建应用: ```bash # 清理构建缓存 flutter clean # 重新获取依赖 flutter pub get # 重新构建 flutter run ``` ### 3. 检查日志 运行应用后,查看日志中是否有: - ✅ `页面加载完成` - ✅ `DocsAPI loaded successfully` - ❌ 如果有错误,查看具体的错误信息 ## 常见问题 ### Q: 配置后仍然无法加载? **A**: 尝试以下步骤: 1. **完全清理并重建**: ```bash flutter clean cd android && ./gradlew clean && cd .. flutter pub get flutter run ``` 2. **检查网络权限**: - 确保 AndroidManifest.xml 中有 `INTERNET` 权限 - 确保应用有网络访问权限(在设备设置中检查) 3. **检查服务器证书**: - 如果使用自签名证书,需要在 `network_security_config.xml` 中添加证书配置 4. **查看详细日志**: - 运行应用时查看控制台输出 - 查看是否有 JavaScript 错误 ### Q: 生产环境是否安全? **A**: 当前配置允许所有 HTTPS 连接,适合开发环境。生产环境建议: 1. **Android**: 只允许特定域名 ```xml your-server.com ``` 2. **iOS**: 只允许特定域名(见上方 iOS 配置示例) ### Q: 是否需要其他权限? **A**: 对于基础功能,只需要: - `INTERNET` - 网络访问 - `ACCESS_NETWORK_STATE` - 检查网络状态 如果使用图片插入功能,还需要: - `CAMERA` - 相机权限 - `READ_EXTERNAL_STORAGE` - 读取存储权限(Android) - `WRITE_EXTERNAL_STORAGE` - 写入存储权限(Android) ## 测试清单 - [ ] AndroidManifest.xml 包含 INTERNET 权限 - [ ] AndroidManifest.xml 引用了 network_security_config - [ ] network_security_config.xml 文件存在且配置正确 - [ ] iOS Info.plist 包含 NSAppTransportSecurity 配置 - [ ] 执行了 `flutter clean` 和重新构建 - [ ] 在浏览器中可以访问 API 脚本 URL - [ ] 应用日志显示页面加载完成 - [ ] 应用日志显示 DocsAPI 加载成功 ## 相关文件 - `example/android/app/src/main/AndroidManifest.xml` - `example/android/app/src/main/res/xml/network_security_config.xml` - `example/ios/Runner/Info.plist` ## 参考文档 - [Android Network Security Configuration](https://developer.android.com/training/articles/security-config) - [iOS App Transport Security](https://developer.apple.com/documentation/security/preventing_insecure_network_connections)