Immich 移动应用程序为最终用户提供原生的 iOS 和 Android 客户端,用于访问和管理他们的照片和视频库,以及将媒体上传到他们的 Immich 服务器。该移动应用采用 Flutter 构建,通过 REST API 与 Immich 服务器通信,并提供后台同步、离线查看和设备备份等功能。
该移动应用程序采用 Flutter 框架构建,使得单一代码库可以同时支持 iOS 和 Android 平台。它采用了基于 Provider 的架构,使用 Riverpod 进行状态管理,并通过自动生成的 OpenAPI 客户端与 Immich 服务器通信。
来源
应用程序的生命周期始于 main.dart 文件,该文件初始化核心服务、设置 Riverpod provider scope 并引导应用程序。它还配置了错误处理、本地化和平台特定的优化。
来源
移动应用程序通过自动生成的 OpenAPI 客户端库与 Immich 服务器通信。这提供了对服务器 REST API 端点的类型安全访问,包括身份验证、资产管理、相册操作等。
来源
移动应用程序的关键功能之一是能够在后台同步照片和视频,即使应用程序未被积极使用。由于 iOS 和 Android 平台各自的后台执行模型,此功能在两者上的实现方式有所不同。
在 iOS 上,后台处理使用 BackgroundTasks 框架实现。应用程序注册后台获取和处理任务,并使用自定义的 BackgroundSyncWorker 来处理后台的实际同步。
来源
移动应用程序通过 easy_localization 包支持多种语言。翻译以 JSON 文件形式存储,并在运行时根据用户的设备语言或偏好加载。
来源
该应用的 iOS 版本包含多项平台特定实现:
该应用程序需要多项权限才能在 iOS 上正常运行:
| 权限 | 用途 |
|---|---|
| 照片库 | 访问并备份用户的照片和视频。 |
| 相机 | 用于在应用程序内拍摄新照片/视频。 |
| 位置 | 用于地理功能和确定 Wi-Fi 网络以进行后台同步。 |
| 后台模式 | 用于后台获取和处理任务。 |
| 通知 | 用于显示备份进度和完成通知。 |
来源
虽然在提供的代码中没有突出显示,但 Android 版本还包括特定实现:
下图说明了在执行身份验证、资产浏览和媒体上传等关键操作时,数据如何在移动应用程序中流动。
来源
该移动应用程序依赖于许多 Flutter 包和库来提供其功能
| 类别 | 主要库 |
|---|---|
| 状态管理 | hooks_riverpod, flutter_hooks |
| 网络 | http, openapi-generated client |
| 导航 | auto_route |
| 存储 | drift, isar, shared_preferences |
| 媒体 | photo_manager, image_picker, cached_network_image |
| UI 组件 | flutter_svg, easy_image_viewer |
| 后台处理 | background_downloader, flutter_local_notifications |
| 定位 | easy_localization, intl |
| 设备集成 | connectivity_plus, device_info_plus, geolocator |
来源
该应用程序使用多种存储机制来本地维护数据:
这使得应用程序能够离线运行,并通过减少重复从服务器获取数据的需要来提高性能。
Immich 移动应用程序是与移动设备上的 Immich 系统进行交互的主要用户界面。其基于 Flutter 的架构允许 iOS 和 Android 之间的代码共享,同时仍支持特定于平台的优化。该应用程序的关键优势在于其强大的后台同步功能、离线支持以及与 Immich 服务器的无缝集成。
有关移动应用程序通信的服务器组件的信息,请参阅 服务器组件。