Lyft 工程师如何利用 iOS ActivityKit 提升用户体验
Lyft 的 iOS 工程师 Max Husar 指出,及时向用户提供更新是改善移动体验的关键,尽管这会增加开发范围和工作量。为了在灵活性、可靠性和可重用性之间取得平衡,Lyft 工程师使用了 iOS ActivityKit 来为应用程序添加动态内容。
ActivityKit 与 Live Activities 简介
ActivityKit 是苹果在 iOS 16.1 和 iPadOS 17 中引入的框架,允许应用程序通过动态岛(Dynamic Island,适用于新设备)或锁屏(适用于旧设备)共享实时更新。其核心功能是 Live Activities,可以看作是通知的进化版,用户不仅可以通过它接收最新信息或启动应用程序,还可以通过按钮和切换功能在无需启动应用程序的情况下执行操作。
Lyft 的实现方法
Lyft 工程师将每个 Live Activity 视为一个在主应用程序之上运行的“迷你应用程序”。这种做法也反映了 Lyft 的组织结构,多个团队同时在不同的领域工作。为了实现这一功能,Lyft 决定使用服务器驱动用户界面(SDUI)来构建 Live Activities 内容。由于 SDUI 框架已经在应用程序的某些屏幕中使用,并且与 Live Activity 重叠,因此重用基本模型和熟悉的模式有助于加快开发速度。
技术挑战与解决方案
Live Activities 的主要限制在于内容更新的最大允许有效载荷大小为 4KB。在 Lyft 的案例中,这要求他们调整 SDUI 模型,并使用 protobuf 进一步压缩有效载荷大小。基于这种方法,Lyft 的 iOS 团队创建了多个与用户交互的组件,包括能够渲染格式化文本、图像或计时器的 RichText 组件,以及用于显示 Lyft 车辆接近速度的进度条。
此外,Lyft 还扩展了他们的解决方案,支持显示远程图像,以便在乘客匹配成功后立即显示司机的个人资料照片和车辆。这一任务需要使用 App Groups 在应用程序和实现 Live Activities 的扩展之间共享文件。然而,Lyft 工程师发现无法可靠且快速地同时显示两张图像(司机照片和车辆)。从用户体验的角度考虑,他们认为司机的个人资料照片更为重要,因此选择通过 APNs 更新有效载荷直接发送 base64 图像数据,以确保无延迟显示。
另一个限制是,图像只能在应用程序处于活动状态或后台处理时间充足时下载。
总结
尽管面临诸多技术挑战,Lyft 工程师采用的 Live Activities 解决方案取得了成功,显著提升了数百万用户的使用体验。如果你对这一技术细节感兴趣,建议阅读原文以了解更多信息。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。