用途:在 React Native/Expo 应用中实现 iOS Live Activities(锁屏与灵动岛)以及 Android 的常驻通知/进行中进度,用于在应用外展示进行中的状态(如行程、订单)。不替代通用推送,也不等同于完整 GPS 追踪。
平台机制:iOS 使用 ActivityKit Live Activity,远程更新时配合 push-to-update;需 iOS 16.1+,灵动岛需在受支持设备上测试。Android 使用常驻通知/实时更新,若策略要求则结合前台服务(FGS)。Expo 使用项目已采用的模块或配置插件(如 expo-live-activity 或文档化的原生桥接);Bare 项目需 Widget Extension 目标与 ActivityKit。
主要能力与规则:内容须当前且有用(ETA、状态、短操作),不做营销;生命周期为 start → update(限流)→ end/dismiss;不在 activity 表面放敏感 PII(如电话需脱敏);提供返回应用正确流程的 deep link;遵守更新配额,按 N 秒或状态变化批量/限流;权限声明与后台模式仅在真实使用时添加。
数据模型:以 TripLiveState 为例,包含 phase(searching/assigned/arriving/in_progress/completed)、title、subtitle、etaMinutes、progress(0..1)、deepLink;将领域状态映射为紧凑 UI,仅在 phase、ETA 或进度明显变化时更新。
iOS 要点:Attribute 类型保持稳定,不跨更新破坏 schema;扩展 UI 提供紧凑布局(锁屏/最小/展开);推送更新需 activity token 与 APNs 并认证后端;完成或取消时结束,stale date 保持一致;测试应用被杀后远程更新仍可用。
Android 要点:使用专用通知渠道(如 trip_progress)与合适重要性;行程/订单活跃期间保持常驻,结束即清除;若持续追踪需与前台服务及 Play 政策对齐;通知操作可打开应用或取消(取消需在应用内确认)。
RN 集成:提供类型化 JS API:startLiveActivity(state)、updateLiveActivity(id, patch)、endLiveActivity(id);以客户端/后端行程状态为唯一事实来源,activity 只是投影;做特性检测,平台或版本不支持时优雅降级为空操作。
反模式:永不结束的 activity、每个 GPS tick 都刷更新、在 Widget Extension 重复业务逻辑、未获用户授权就启动、展示完整地址与不必要敏感数据。
完成标准:主流程 start/update/end 已测试、deep link 正确、更新限流已定义、iOS 锁屏/灵动岛(或回退)与 Android 常驻通知已验证、行程结束后无 activity 泄漏。