跳转到正文
YGJoon 技术博客

Flutter 项目案例(二):隐私同意、SDK 初始化与登录恢复

发布于:
·853 字 · 约 2 分钟·作者:
隐私确认之前,第三方 SDK 和登录会话分别应处于什么状态?示例给出初始化顺序,并标出用户拒绝后的处理边界。
Flutter 项目案例(二):隐私同意、SDK 初始化与登录恢复文章封面
目录

把初始化时机放在同意之后

启动流程控制器先读取本地隐私确认状态。首次启动时展示用户协议与隐私政策;用户同意后保存状态,再进入主界面。已经确认过的用户则可以走同一条初始化路径。

Future<void> enterMainScreen() async {
  await initializeIntegrations();
  navigateToHome();
}

集成初始化流程可以集中接入地图、统计、支付和崩溃分析等第三方能力。可能收集设备或网络信息的 SDK,应等待隐私确认后再启动,并为用户拒绝同意的路径定义清晰行为。

登录恢复发生在根界面之前

应用启动时先恢复会话,再创建业务页面。会话恢复从本地存储读取用户数据,并还原认证状态;后续请求从当前会话中读取访问凭据。

保存流程应同时更新内存与持久化状态:

Future<void> saveSession(SessionSnapshot snapshot) async {
  await sessionStorage.save(snapshot);
  currentSession.value = snapshot;
}

等待会话恢复完成后再构建首屏,可以避免界面先显示未登录状态、随后又闪回已登录状态。

持久化与状态一致性

认证凭据不适合与普通偏好设置混存在一起。应评估平台安全存储,并考虑退出登录、凭据过期和账号切换时的清理策略。客户端登录标记只表达本地状态,受保护的接口仍需由服务端校验凭据。

用户数据与登录布尔值若分别持久化,恢复时可能出现矛盾。最好选一个事实来源,并覆盖数据损坏、凭据缺失和会话过期等情况。

路由检查要真正阻止未授权进入

路由守卫如果只显示提示,却允许原目标页面继续建立,就没有完成访问控制。需要登录的页面应由导航逻辑阻止进入,服务端也应检查每个受保护请求。

经验总结

登录态的坑我在货运项目里真踩过:登录信息存在 SharedPreferences(明文),退出登录时只清了存储,没清 GetX 里常驻的 controller,切账号后首页还是旧用户的数据,测试当场抓包。修法是退出登录走统一方法:清存储、清内存会话、Get.delete 掉业务 controller,三件套缺一不可。另一个教训是登录标记别和用户数据分开存,我之前布尔值和用户信息分两个 key,恢复时出现过”已登录但没用户信息”的矛盾态。至于第三方 SDK 的初始化时机,这篇示例应用的做法是对的——隐私确认之后再启动,采集类 SDK 早一秒都不行。

小结

隐私确认与会话恢复分别决定第三方能力何时启动、首屏以何种身份状态运行。把它们放在初始化流程中明确排序,再为拒绝授权、凭据清理和受保护页面补上边界处理,启动行为会更稳定。


分享这篇文章:


相关文章

上一篇
Flutter 项目案例(一):从 main() 到首页
下一篇
Flutter 项目案例(三):定位请求的生命周期与失败降级