# 隐私政策与应用权限功能实现报告 ## 📋 概述 本报告详细记录了为MyQrCode应用添加隐私政策和应用权限管理功能的完整实现过程,包括界面设计、技术实现、本地化支持以及用户体验优化。 ## 🎯 功能特性 ### 1. 应用权限管理 (`AppPermissionsView.swift`) #### 核心功能: - **实时权限状态检测**:自动检测相机和相册权限状态 - **权限状态显示**:清晰显示当前权限状态(已授权、已拒绝、受限制、未确定、有限访问) - **权限请求功能**:一键请求相机和相册权限 - **系统设置跳转**:快速跳转到系统设置页面 #### 技术实现: ```swift // 权限状态检测 private func checkPermissions() { cameraPermissionStatus = AVCaptureDevice.authorizationStatus(for: .video) photoPermissionStatus = PHPhotoLibrary.authorizationStatus() } // 权限请求 private func requestCameraPermission() { AVCaptureDevice.requestAccess(for: .video) { _ in DispatchQueue.main.async { checkPermissions() } } } ``` #### 界面设计: - **状态卡片**:每个权限都有独立的状态卡片 - **颜色编码**:不同状态使用不同颜色(绿色=已授权,红色=已拒绝,橙色=受限制等) - **操作按钮**:根据当前状态显示相应的操作按钮 ### 2. 隐私政策界面 (`PrivacyPolicyView.swift`) #### 核心功能: - **HTML格式显示**:使用WKWebView加载本地HTML文件 - **简约风格设计**:现代化的界面布局和样式 - **完整内容**:包含所有必要的隐私政策章节 #### 技术实现: ```swift struct WebView: UIViewRepresentable { let url: URL func makeUIView(context: Context) -> WKWebView { let webView = WKWebView() webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent()) return webView } } ``` #### 界面特点: - **渐变头部**:蓝紫色渐变背景的标题区域 - **卡片式布局**:清爽的白色容器,圆角设计 - **响应式设计**:适配不同屏幕尺寸 - **现代化样式**:使用CSS3和现代设计元素 ### 3. 设置界面集成 (`SettingsView.swift`) #### 新增功能: - **应用权限卡片**:显示权限管理入口 - **隐私政策卡片**:显示隐私政策入口 - **导航集成**:使用NavigationLink直接导航到相关界面 #### 界面设计: ```swift // 应用权限卡片 NavigationLink(destination: AppPermissionsView().environmentObject(languageManager)) { VStack(alignment: .leading, spacing: 16) { HStack { Image(systemName: "lock.shield") Text("app_permissions".localized) Spacer() Image(systemName: "chevron.right") } Text("manage_app_permissions".localized) } } // 隐私政策卡片 NavigationLink(destination: PrivacyPolicyView().environmentObject(languageManager)) { VStack(alignment: .leading, spacing: 16) { HStack { Image(systemName: "hand.raised.fill") Text("privacy_policy".localized) Spacer() Image(systemName: "chevron.right") } Text("view_privacy_policy".localized) } } ``` ### 4. 语言本地化系统 (`LanguageManager.swift`) #### 核心功能: - **系统语言跟随**:默认跟随系统语言设置 - **智能语言检测**:自动检测系统语言并选择对应支持的语言 - **手动语言选择**:用户可手动选择特定语言 - **语言回退机制**:如果没有对应的语言文件,自动使用英语 #### 技术实现: ```swift // 检测系统语言并返回对应的支持语言 private func detectSystemLanguage() -> Language { let systemLanguage = Locale.current.languageCode ?? "en" // 检查是否是简体中文 if systemLanguage.hasPrefix("zh") { return .chinese } // 检查是否是泰文 if systemLanguage == "th" { return .thai } // 其他语言默认使用英文 return .english } // 加载保存的语言设置 private func loadLanguage() { let hasManualLanguage = UserDefaults.standard.object(forKey: languageKey) != nil if hasManualLanguage { // 如果用户手动设置过语言,使用保存的设置 if let savedLanguage = UserDefaults.standard.string(forKey: languageKey), let language = Language(rawValue: savedLanguage) { if language == .system { // 如果保存的是系统语言,检测当前系统语言 let systemLanguage = detectSystemLanguage() currentLanguage = systemLanguage } else { currentLanguage = language } } } else { // 首次启动,默认使用系统语言 currentLanguage = .system let systemLanguage = detectSystemLanguage() // 保存系统语言设置 UserDefaults.standard.set("system", forKey: languageKey) UserDefaults.standard.set(true, forKey: systemLanguageKey) // 设置实际语言 switchLanguage(to: .system) } } ``` #### 支持的语言选项: - **🌐 跟随系统**:自动跟随系统语言设置 - **🇺🇸 English**:英语 - **🇨🇳 中文**:简体中文 - **🇹🇭 ไทย**:泰文 #### 语言选择界面: - **折叠式选择器**:默认显示当前选中的语言,点击后展开所有选项 - **视觉反馈**:选中状态有蓝色背景和勾选图标 - **国旗图标**:每个语言选项都有对应的国旗图标 - **动画效果**:展开/收起有平滑的动画过渡 - **空间优化**:避免语言选项过多时占用过多空间 ## 📄 隐私政策内容 ### HTML文件结构: ```html