Xamarin.iOS/Android检测版本构建号变更 登录后触发闪屏方案
实现方案
核心逻辑非常直接:本地持久化存储用户上一次成功登录时对应的应用版本号、构建号,每次登录完成后拉取当前安装包的版本信息和本地存储的旧值做比对,只要存在差异就判定为版本更新,触发闪屏展示,闪屏展示完成后再把新的版本信息写入本地存储覆盖旧值,避免重复弹出。
具体实现步骤
基础依赖配置
确保你已经在项目中引入并初始化了Xamarin.Essentials:Android端需要在MainActivity的OnCreate方法中调用Xamarin.Essentials.Platform.Init(this, savedInstanceState),iOS端需要在AppDelegate的FinishedLaunching方法中完成初始化,否则版本获取、本地存储接口无法正常调用。获取当前应用版本信息
直接调用Xamarin.Essentials内置的版本追踪接口就能拿到跨平台统一的版本、构建号,不需要自己写平台特定代码:// 取对外版本号:对应Android的VersionName、iOS的CFBundleShortVersionString string currentVersion = VersionTracking.CurrentVersion; // 取内部构建号:对应Android的VersionCode、iOS的CFBundleVersion string currentBuild = VersionTracking.CurrentBuild;本地存储历史版本记录
用Xamarin.Essentials的Preferences做持久化存储即可,不要用内存变量存储,应用被杀后数据会丢失。先定义两个固定的存储Key:private const string LastLoginVersionKey = "last_login_record_version"; private const string LastLoginBuildKey = "last_login_record_build";用户首次安装应用第一次登录时,本地没有对应的存储值,直接把当前版本、构建号写入存储即可,不需要弹更新闪屏。
登录节点加版本校验逻辑
在登录成功的回调方法中加入版本比对逻辑,示例代码如下:// 登录成功、进入主页面之前执行 var savedVersion = Preferences.Get(LastLoginVersionKey, string.Empty); var savedBuild = Preferences.Get(LastLoginBuildKey, string.Empty); // 非首次登录场景下,只要版本号或构建号有任意一个不一致,就触发更新闪屏 if (!string.IsNullOrEmpty(savedVersion) && !string.IsNullOrEmpty(savedBuild)) { if (savedVersion != currentVersion || savedBuild != currentBuild) { // 以模态页方式打开更新闪屏,禁用手势返回避免流程被打断 await Navigation.PushModalAsync(new UpdateSplashPage()); } } // 等闪屏展示完成(比如倒计时结束、用户点击确认按钮),再更新本地存储的版本记录 Preferences.Set(LastLoginVersionKey, currentVersion); Preferences.Set(LastLoginBuildKey, currentBuild);
注意事项
- 不建议直接用
VersionTracking自带的IsFirstLaunchForCurrentVersion/IsFirstLaunchForCurrentBuild属性做判定,这两个属性的标记时机是应用冷启动时,如果用户更新完应用打开后没登录就退出,标记位会被置为已访问,等用户下次登录时就检测不到版本更新了,自己通过Preferences存登录节点的版本记录,触发时机完全可控,更贴合你的需求。 - 如果需要区分大版本更新才弹闪屏、小构建迭代不弹,可以修改比对逻辑,只比对
currentVersion和存储的旧版本号即可。 - 调试阶段不需要反复打升级包测试,可以手动修改项目里的版本号/构建号,或者直接清空应用本地存储来模拟首次安装、版本更新的场景。
内容的提问来源于stack exchange,提问作者coder123
相关产品推荐
相关产品推荐

