You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
13 KiB
13 KiB
隐私政策与应用权限功能实现报告
📋 概述
本报告详细记录了为MyQrCode应用添加隐私政策和应用权限管理功能的完整实现过程,包括界面设计、技术实现、本地化支持以及用户体验优化。
🎯 功能特性
1. 应用权限管理 (AppPermissionsView.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文件
- 简约风格设计:现代化的界面布局和样式
- 完整内容:包含所有必要的隐私政策章节
技术实现:
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直接导航到相关界面
界面设计:
// 应用权限卡片
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
)
核心功能:
- 系统语言跟随:默认跟随系统语言设置
- 智能语言检测:自动检测系统语言并选择对应支持的语言
- 手动语言选择:用户可手动选择特定语言
- 语言回退机制:如果没有对应的语言文件,自动使用英语
技术实现:
// 检测系统语言并返回对应的支持语言
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:英语
- 🇨🇳 中文:简体中文
- 🇹🇭 ไทย:泰文
语言选择界面:
- 折叠式选择器:默认显示当前选中的语言,点击后展开所有选项
- 视觉反馈:选中状态有蓝色背景和勾选图标
- 国旗图标:每个语言选项都有对应的国旗图标
- 动画效果:展开/收起有平滑的动画过渡
- 空间优化:避免语言选项过多时占用过多空间
- 多语言支持:支持12种主流语言(英语、中文、日语、韩语、法语、德语、西班牙语、意大利语、葡萄牙语、俄语、泰文、系统跟随),所有语言文件包含完整的711个本地化条目
📄 隐私政策内容
HTML文件结构:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Privacy Policy - MyQrCode</title>
<style>
/* 简约风格CSS样式 */
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Privacy Policy</h1>
<div class="last-updated">
<strong>Last Updated:</strong> December 28, 2024
</div>
</div>
<!-- 8个主要章节 -->
<h2>1. Information We Collect</h2>
<h2>2. How We Use Your Information</h2>
<h2>3. Information Sharing</h2>
<h2>4. Data Security</h2>
<h2>5. Your Rights</h2>
<h2>6. Children's Privacy</h2>
<h2>7. Changes to This Policy</h2>
<h2>8. Contact Us</h2>
</div>
</body>
</html>
隐私政策特点:
- 英文版本:统一使用英文,确保法律效力
- 完整内容:包含所有必要的隐私政策章节
- 简约设计:现代化的界面布局和样式
- 响应式布局:适配不同屏幕尺寸
🌍 本地化支持
支持的语言:
- 英语 (en):默认语言,作为回退语言
- 简体中文 (zh-Hans):完整的中文本地化
- 日语 (ja):完整的日文本地化
- 韩语 (ko):完整的韩文本地化
- 法语 (fr):完整的法文本地化
- 德语 (de):完整的德文本地化
- 西班牙语 (es):完整的西班牙语本地化
- 意大利语 (it):完整的意大利语本地化
- 葡萄牙语 (pt):完整的葡萄牙语本地化
- 俄语 (ru):完整的俄语本地化
- 泰文 (th):完整的泰文本地化
- 系统跟随:自动跟随设备系统语言设置
本地化文件:
MyQrCode/en.lproj/Localizable.strings
:英文本地化MyQrCode/zh-Hans.lproj/Localizable.strings
:简体中文本地化MyQrCode/ja.lproj/Localizable.strings
:日文本地化MyQrCode/ko.lproj/Localizable.strings
:韩文本地化MyQrCode/fr.lproj/Localizable.strings
:法文本地化MyQrCode/de.lproj/Localizable.strings
:德文本地化MyQrCode/es.lproj/Localizable.strings
:西班牙语本地化MyQrCode/it.lproj/Localizable.strings
:意大利语本地化MyQrCode/pt.lproj/Localizable.strings
:葡萄牙语本地化MyQrCode/ru.lproj/Localizable.strings
:俄语本地化MyQrCode/th.lproj/Localizable.strings
:泰文本地化
新增本地化字符串:
"system_language" = "System"; // 英文
"system_language" = "跟随系统"; // 中文
"system_language" = "システム"; // 日文
"system_language" = "시스템"; // 韩文
"system_language" = "Système"; // 法文
"system_language" = "System"; // 德文
"system_language" = "Sistema"; // 西班牙文
"system_language" = "Sistema"; // 意大利文
"system_language" = "Sistema"; // 葡萄牙文
"system_language" = "Система"; // 俄文
"system_language" = "ตามระบบ"; // 泰文
📱 用户体验
权限管理:
- 用户进入设置界面
- 点击"应用权限"卡片
- 直接导航到权限管理界面
- 查看当前权限状态
- 根据需要请求权限或打开系统设置
隐私政策:
- 用户进入设置界面
- 点击"隐私政策"卡片
- 直接导航到隐私政策界面
- 查看简约风格的HTML格式隐私政策
- 了解应用的数据处理方式
语言设置:
- 用户进入设置界面
- 在语言设置区域点击当前语言显示
- 展开语言选项列表
- 可选择"跟随系统"自动跟随系统语言
- 或手动选择特定语言(英语、中文、日语、韩语、法语、德语、西班牙语、意大利语、葡萄牙语、俄语、泰文)
- 选择后自动收起选项列表并立即应用新的语言设置
🔧 技术实现细节
系统语言检测:
- 使用
Locale.current.languageCode
获取系统语言代码 - 支持中文前缀检测(zh-Hans, zh-CN等)
- 支持日语检测(ja)
- 支持韩语检测(ko)
- 支持法语检测(fr)
- 支持德语检测(de)
- 支持西班牙语检测(es)
- 支持意大利语检测(it)
- 支持葡萄牙语检测(pt)
- 支持俄语检测(ru)
- 支持泰文检测(th)
- 其他语言默认使用英语
本地化回退机制:
- 智能回退:当某个语言文件中缺少特定字符串条目时,自动回退到英语版本
- 双重检查:首先检查当前语言是否包含该条目,如果不包含则回退到英语
- 最终回退:如果英语也没有该条目,则返回key本身作为最后的回退
- 无缝体验:用户不会看到缺失的本地化条目,始终有可读的文本显示
本地化文件同步:
- 条目一致性:确保所有语言文件包含相同的711个本地化条目
- 重复key清理:自动检测并清理重复的本地化key定义
- 缺失条目补充:自动为缺失的语言文件添加条目,使用英语作为默认值
- 完整性验证:编译时验证所有本地化文件的完整性
语言状态管理:
- 使用UserDefaults保存语言设置
- 区分手动设置和系统跟随状态
- 支持动态语言切换和UI刷新
导航优化:
- 移除双重NavigationView问题
- 使用NavigationLink提供直接导航
- 简化子视图的导航标题设置
📝 总结
本次更新成功为MyQrCode应用添加了完整的隐私政策和应用权限管理功能,包括:
- 完整的权限管理界面,支持实时状态显示和权限操作
- 简约风格的隐私政策界面,使用HTML格式提供现代化的英文版隐私政策
- 无缝的设置界面集成,使用NavigationLink提供直接的导航体验
- 智能的语言本地化系统,支持系统语言跟随和手动语言选择
- 全面的本地化支持,支持12种主流语言(英语、中文、日语、韩语、法语、德语、西班牙语、意大利语、葡萄牙语、俄语、泰文)
- 现代化的界面设计,提供优秀的用户体验
主要改进:
- 隐私政策HTML:改为简约风格设计,使用渐变头部和现代化的布局
- 导航方式:从sheet模态展示改为NavigationLink直接导航,提供更流畅的用户体验
- 语言系统:添加系统语言跟随功能,智能检测系统语言并自动选择对应支持的语言
- 多语言支持:新增日语、韩语、法语、德语、西班牙语、意大利语、葡萄牙语、俄语等主流国家语言支持
- 智能回退机制:修复本地化条目缺失时的回退逻辑,确保默认使用英语条目
- 本地化文件同步:确保所有语言文件包含相同的条目,避免缺失的本地化字符串
- 语言选择器:改为折叠式设计,默认收起,点击展开,避免占用过多空间
- 界面优化:移除了不必要的dismiss相关代码,简化了导航逻辑
- 用户体验:解决双重导航栏问题,提供更清晰的导航层次
所有功能都已通过编译验证,可以立即投入使用。这些功能将帮助应用更好地管理用户权限,提供透明的隐私政策,智能地适应不同语言环境,并符合现代应用的法律和用户体验要求。