移除 SplashCoordinator,bootstrap 期间用 SplashView 覆盖避免空白闪屏,其余账号数据改为后台补充刷新。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.0 KiB
2.0 KiB
Splash 模块业务逻辑
模块职责
Splash 模块负责冷启动品牌展示,与系统 Launch Screen 保持相同视觉,并在 bootstrap 完成前避免空白页或登录页闪屏。
冷启动恢复登录态由 SessionBootstrapper 负责;SplashView 仅覆盖 bootstrap 阻塞阶段,不做固定时长品牌停留。
核心对象
SplashView:冷启动 bootstrap 期间展示的品牌页,与 Launch Screen 布局一致。SplashTypography:启动页标题/副标题字号与 UIKit 字体,供SplashView与Launch Screen.storyboard对齐。SplashLogo/LaunchBackground:启动页图片与背景色资源。SessionBootstrapper:冷启动恢复登录态,阻塞等待rolePermissions,其余数据后台刷新。AccountContextLoader.restorePermissions/refreshSupplementalContext:拆分阻塞阶段与后台补充阶段。
展示规则
- 系统 Launch Screen:白底、180×180 Logo、「随心瞰 / 商家版」文案。
- 应用内
SplashView:bootstrap 完成前覆盖根视图,避免.restoring空白或登录页闪现。 - bootstrap 结束后淡出 Splash,进入
LoginView或MainTabsView。 - 无固定最短展示时长。
启动时序
- iOS 系统 Launch Screen 展示品牌页。
RootView挂载后立即显示SplashView覆盖层。SessionBootstrapper.restore并行恢复登录态。- 无 token:bootstrap 完成后进入
LoginView。 - 有 token:恢复
AccountSnapshot→ 阻塞请求rolePermissions→markLoggedIn→ 进入MainTabsView。 userInfo、scenicListAll、storeAll在后台补充刷新,不阻塞首屏。- 冷启动期间不显示 Lottie 全局 Loading。
与 Android 的差异
- Android 首启隐私弹窗在 Splash 上;iOS 仍在登录页勾选协议。
- Android 系统 Launch Screen 与应用内 Splash 使用同一 XML;iOS 系统 Launch Screen 与应用内
SplashView保持相同布局,但应用内 Splash 仅在 bootstrap 期间展示。