菜单

移动应用程序

相关源文件

Immich 移动应用程序为最终用户提供原生的 iOS 和 Android 客户端,用于访问和管理他们的照片和视频库,以及将媒体上传到他们的 Immich 服务器。该移动应用采用 Flutter 构建,通过 REST API 与 Immich 服务器通信,并提供后台同步、离线查看和设备备份等功能。

架构概述

该移动应用程序采用 Flutter 框架构建,使得单一代码库可以同时支持 iOS 和 Android 平台。它采用了基于 Provider 的架构,使用 Riverpod 进行状态管理,并通过自动生成的 OpenAPI 客户端与 Immich 服务器通信。

来源

核心组件

应用程序入口点

应用程序的生命周期始于 main.dart 文件,该文件初始化核心服务、设置 Riverpod provider scope 并引导应用程序。它还配置了错误处理、本地化和平台特定的优化。

来源

API 通信

移动应用程序通过自动生成的 OpenAPI 客户端库与 Immich 服务器通信。这提供了对服务器 REST API 端点的类型安全访问,包括身份验证、资产管理、相册操作等。

来源

后台同步

移动应用程序的关键功能之一是能够在后台同步照片和视频,即使应用程序未被积极使用。由于 iOS 和 Android 平台各自的后台执行模型,此功能在两者上的实现方式有所不同。

iOS 后台处理

在 iOS 上,后台处理使用 BackgroundTasks 框架实现。应用程序注册后台获取和处理任务,并使用自定义的 BackgroundSyncWorker 来处理后台的实际同步。

来源

国际化

移动应用程序通过 easy_localization 包支持多种语言。翻译以 JSON 文件形式存储,并在运行时根据用户的设备语言或偏好加载。

来源

特定平台实现

iOS 特定功能

该应用的 iOS 版本包含多项平台特定实现:

  1. 后台任务:使用 iOS BackgroundTasks 框架注册后台获取和处理。
  2. 照片库访问:在 Info.plist 中配置了适当的权限。
  3. 分享扩展:允许将内容直接从其他应用分享到 Immich。
  4. App Groups:用于主应用和扩展之间的通信。

iOS 权限和功能

该应用程序需要多项权限才能在 iOS 上正常运行:

权限用途
照片库访问并备份用户的照片和视频。
相机用于在应用程序内拍摄新照片/视频。
位置用于地理功能和确定 Wi-Fi 网络以进行后台同步。
后台模式用于后台获取和处理任务。
通知用于显示备份进度和完成通知。

来源

Android 特定功能

虽然在提供的代码中没有突出显示,但 Android 版本还包括特定实现:

  1. 后台处理:使用 Android 的 WorkManager 或类似 API。
  2. 高刷新率支持:为具有高刷新率显示屏的设备进行了配置。
  3. 照片库访问:使用 MediaStore API 或类似技术。

数据流

下图说明了在执行身份验证、资产浏览和媒体上传等关键操作时,数据如何在移动应用程序中流动。

来源

依赖项和库

该移动应用程序依赖于许多 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

来源

本地存储

该应用程序使用多种存储机制来本地维护数据:

  1. SQLite 数据库(通过 Drift):用于结构化数据,如备份状态、设置和元数据。
  2. Isar 数据库:用于高性能对象存储。
  3. 缓存管理器:用于临时存储下载的资产。
  4. 共享偏好设置:用于简单键值对形式存储的用户偏好。

这使得应用程序能够离线运行,并通过减少重复从服务器获取数据的需要来提高性能。

结论

Immich 移动应用程序是与移动设备上的 Immich 系统进行交互的主要用户界面。其基于 Flutter 的架构允许 iOS 和 Android 之间的代码共享,同时仍支持特定于平台的优化。该应用程序的关键优势在于其强大的后台同步功能、离线支持以及与 Immich 服务器的无缝集成。

有关移动应用程序通信的服务器组件的信息,请参阅 服务器组件