• 用于离线遥测收集的 iOS SDK,具有加密、后台交付和集成到现有应用程序中的功能

    11 小时 前
    • 所需预算高达 900.28 USD
    • 等待表演者...
  • 初始情况 - 有一个可供现场员工使用的 iOS 应用程序(iOS 15-17、Swift、UIKit + SwiftUI 上的一些屏幕)。用户可以在没有连接的情况下工作,并且必须保证在连接出现时将有关使用情况和技术流程的数据(事件、计时、错误、会话参数)传送到我们的 API。目前,遥测数据直接通过 URLSession 发送,并且经常由于离线、应用程序查杀和后台任务竞争而丢失。还有在设备上存储敏感数据和控制音量的要求。

    任务是开发和实现模块化 iOS SDK(如 Swift Package),以可靠地收集和交付遥测数据。

    技术环境和限制 - Swift 5.9+、Xcode 15+、iOS 15+。禁止连接重型分析SDK(Firebase/Amplitude等)。您无法收集广告标识符并跟踪用户。数据必须在本地存储有限的时间和数量。服务器部分已经存在 - REST 端点 /v1/telemetry/batch 接受 gzip JSON,通过应用程序的现有访问令牌进行授权(我们将提供用于接收令牌的协议)。事件格式是固定的 - id (UUID)、ts (ISO8601)、type (字符串)、payload (字典)、sessionId。

    该怎么办 -
    1) 设计一个 SDK 架构 - 一个公共 API,用于记录来自应用程序、内部队列、存储、传递、重发的事件。
    2)本地队列存储 - 选择并实现(Core Data 或 SQLite/GRDB,无需外部服务)。要求:原子性、抗崩溃性、批量采样能力、按id重复数据删除。
    3) 设备上的加密 - 以加密形式存储有效负载 (AES-GCM),将密钥存储在 Keychain 中,支持密钥轮换而不丢失队列。
    4) 交付 - 使用 gzip 发送批次,使用丢弃最旧策略限制批次大小(例如 256 KB)和总队列大小(例如 20 MB)。具有指数延迟、抖动并考虑服务器响应代码 (429/5xx) 的重发。尊重低功耗模式。
    5) 后台脚本 - 进入后台并终止应用程序时可以正常工作。使用 BGTaskScheduler 进行定期传送,以及在网络可用时发送。不要违反 iOS 对后台活动的限制。
    6) 网络监控 - Network.framework (NWPathMonitor) 用于在连接恢复时触发传递。
    7) 集成到应用程序中 - 在 2-3 个记录点(例如错误、导航事件、系统计时)处用 SDK 替换当前的直接发送。提供来自不同线程的线程安全调用。
    8) 测试 - 通过单元测试覆盖关键部分(排队、加密、批量形成、重发策略)。向模拟服务器(URLProtocol)添加最少的集成测试和离线在线脚本测试。

    具体结果是一个包含 Swift Package(源、测试)的存储库、集成到现有应用程序的使用示例和说明,以及连接包和替换旧发送调用的 MR/PR。

    可衡量的验收标准 -
    - 启用飞行模式时,事件将写入队列,应用程序重新启动后不会丢失;禁用飞行模式后,当应用程序活跃使用时,所有累积事件将在最多 15 分钟内传递到端点。
    - 队列大小限制为 20 MB - 如果超过,最旧的事件将被删除,应用程序不会崩溃或冻结。
    - 磁盘上的有效负载不以明文形式存储 - 通过检查容器文件进行验证(来自 JSON 的字符串不会以纯文本形式读取)。
    - SDK不使用禁止的第三方分析服务,也不请求不必要的权限。
    - 使用 gzip 分批进行交付,正确处理 429 和 5xx(重发),除 429 之外的 4xx 不重发。
    - 单元测试在 CI 本地运行(xcodebuild 测试),覆盖至少 60% 的交付/队列模块代码。

    此外,您可以提供格式优化(例如,紧凑的 JSON/CBOR),但最终的传输格式应保留 JSON,因为它现在位于服务器上。
您的报价

您尚未提交此订单的报价。
点击“提交报价”发送您的报价。

需要类似的任务吗?

如果该项目接近您的需求,您可以查看该类别中的现成服务或发布您自己的任务以及所需的预算、截止日期和要求。

The project «用于离线遥测收集的 iOS SDK,具有加密、后台交付和集成到现有应用程序中的功能» can be used as a reference for your own brief: what should be done, what result is needed and what budget to set.