• Android - 为现场库存应用程序实现具有差异同步和加密的离线模式

    10 小时 前
    • 所需预算高达 650.75 USD
    • 等待表演者...
  • 有一个内部 Android 应用程序,用于仓库和建筑工地的设备现场盘点。现在它只能在线工作:扫描二维码/条形码、查看卡片、创作表演和拍照。站点通常没有网络,迫使员工在第三方笔记中做笔记,然后手动传输数据。当互联网出现时,我们需要添加一个具有可靠同步的成熟离线模式。

    技术环境:Kotlin、Android 10+、MVVM、Retrofit、Room 已部分使用,服务器 API 无法更改。通过 OAuth2 授权,访问令牌持续 30 分钟,刷新令牌可用。后端提供 REST 端点:GET /items?updatedSince=timestamp、POST /acts、PATCH /items/{id}、照片上传作为单独的端点。服务器具有 Item 和 Act 实体的 version (int) 和 UpdatedAt (ISO) 字段,但服务器上没有解决冲突。

    需要实施什么:
    - 本地存储:扩展项目、行动、附件以及挂起的操作表和同步元数据的房间架构。数据(包括敏感字段和附件路径)必须加密存储在设备上。对于 Android,可以使用 Jetpack Security (EncryptedFile/EncryptedSharedPreferences) 和/或 SQLCipher;在对 PR 的评论中证明你的选择是正确的。
    - 更改队列:所有离线用户操作都应记录为幂等操作(创建操作、更改状态、链接照片、编辑字段),并且能够重新发送而不重复。每个操作都需要一个 clientOperationId (UUID) 和确定性重新提交规则。
    - 后台同步:通过 WorkManager(限制:网络连接、电池电量不低)。实现双向同步:通过updatedSince从服务器拉取更新,然后推送本地操作。支持退避、部分错误、网络超时和令牌刷新。
    - 客户端上的冲突解决:如果项目在本地进行了更改,并且在服务器上也进行了更改(版本/updatedAt),则需要应用一种策略:本地更改对于一组特定字段具有优先权(修复列表),但如果状态/责任存在冲突 - 向用户显示一个比较屏幕,其中选择一个选项并记录解决方案。该屏幕应该只针对实际发生冲突的实体出现。
    - 附件(照片):使用下载队列在本地保存照片,应用程序重新启动后仍可保存。限制:队列中总共不超过50MB;如果超出,则显示清晰的通知并阻止添加新附件,直到同步/删除。
    - 遥测:添加具有级别的本地同步日志(到文件),而不将其发送到外部。日志应包含操作数、同步时间、冲突数和 API 错误。

    具体结果:向具有离线工作模式的存储库进行 PR、数据库迁移、测试以及有关如何检查设备的简要说明。

    限制:不要更改服务器 API,仅在必要时添加新库并且占用空间最小,支持 Android 10-14,应用程序必须在没有 Google Play 服务的情况下正常工作。

    验收标准(可测量):
    1) 在飞行模式下,您可以:扫描 30 个位置,更改不同项目的至少 20 个字段,创建 5 个动作并附加 10 张照片 - 所有数据都保存在本地并在重新启动应用程序后显示。
    2)打开网络后,同步完成,无重复:服务器上正好出现5个新Act,Item没有重复变化,所有10张照片都链接了。
    3) 如果出现人为创建的冲突(上次拉取后在服务器上更改了 Item,并且在本地更改了相同的 Item),应用程序会检测到冲突并显示比较屏幕;用户选择结果与所选版本匹配后,下次同步时冲突就会消失。
    4) 通过 WorkManager 进行的后台同步每 15 分钟执行一次不超过一次,但从设置屏幕手动启动会立即启动同步。
    5)本地数据真正加密:从设备复制时无法读取明文的数据库/附件文件内容(指定验证方式即可)。

    预期阶段:审核当前架构和数据模式、设计同步和冲突模型、实现存储/队列、实现同步引擎、UI 冲突、测试和稳定。

    我将提供对以下内容的访问:Android 源代码、Swagger/请求集合、API 测试平台、多个测试帐户和现场用户场景。
您的报价

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

需要类似的任务吗?

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

The project «Android - 为现场库存应用程序实现具有差异同步和加密的离线模式» can be used as a reference for your own brief: what should be done, what result is needed and what budget to set.