18188博金宝电子体育频道8bet金宝搏官网OkCupid的Android团队每周都会发布新功能和错误修复。在短时间内,这款应用可以看到性能、用户体验的改善,甚至收入的增加。当然,我们希望尽可能多的用户收到这些改进,但每周的应用程序更新可能显得过多,并不是所有用户都启用了自动更新。在谷歌的PlayCore库支持应用内更新之前和之后,我们已经为这个问题实施了解决方案。

预应用程序内更新解决方案

强制更新-1

在应用程序开始时,我们发出一个网络请求来初始化体验。用户所在的当前版本作为参数传递给此请求,响应中包含一个布尔标志,用于指示是否应强制更新。依赖此字段需要web开发人员在决定放大强制版本时手动更新该布尔值的条件值。它还依赖于我们来确保当前版本参数的值是最新的。
如果forceUpdate==真,用户将以模态提出,将它们重定向到我们的应用程序播放商店列表中。

有趣的openplaystore(){val意图=意图(intent.action_view)intent.data = uri.parse(constants.play_store_link)开始活动(意图)}

发布 - 在应用更新解决方案中

谷歌的PlayCore库现在支持应用内更新。看看文件在这里查看设置所需的内容。

为了实现更新流,我们必须执行以下操作;

1确定我们是否要

  • 强制用户更新
  • 建议更新
  • 没做什么

为了做出这个决定,我们使用Firebase远程配置。Firebase授予Android团队更改更新属性的能力,而无需依赖另一个团队对API所做的更改。我们指定的应用内更新属性188博金宝电子体育频道的值为NO\u update、IMMEDIATE\u update或FLEXIBLE\u update。用户登录后,我们检查Firebase以查看是否应该提示更新。

有趣promptupdate(无:可选){val versionfromfirebase = firebaseremoteconfig .getInstance().getstring(firebaseConstants.in_pring_update_property)if(versionfromfirebase.isnotempty()){val updateType = integer.valueof(VersionFromFirebase)if(UpdateType!= firebaseConstants。no_update){updatemanager.checkifupdateisavailable(UpdateTeype,this)}}}}

2查看播放商店以获取更新的版本

库通过看起来像魔术的东西来确定play store上是否有更新的应用程序版本。测试时,请使用与play store上的应用程序具有相同签名的发布版本。另外,硬编码您用来测试的APK的早期版本。

fun checkIfUpdateIsAvailable(更新类型:Int,侦听器:UpdateCheckListener){AppUpdateInfo任务。addOnSuccessListener{appUpdateInfo->如果(appUpdateInfo.updateAvailability可用性() == UpdateAvailability.UPDATE\u可用&& appUpdateInfo.isUpdateTypeAllowed允许(updateType)){updateAvailable=appUpdateInfo.availableVersionCode文件() listener.onUpdate可用(appUpdateInfo)}

如果有一个更新的版本可供下载,我们只想建议一个更新,我们要确保我们没有纠缠用户更新到相同的版本之前。如果我们强制更新,用户将不能选择退出。每次提示用户更新时,我们都会将该版本号存储在共享首选项中,并在再次提示用户之前检查该值。如果他们之前没有拒绝更新,那么我们会显示下载更新的提示。您可以在活动的活动结果.

有趣的onupdateavailable(appupdateinfo:appupdateinfo){val lastupdateversiondenied = //存储在sharedprefs val userdeniedcurrentupdate =(lastupdateversiondenied == updateavailable)(!userdeniedcurrentupdate){//此方法如果UpdoTeType为灵活性提供用户选择,则需要更新如果是imberatiate appupdatemanager.startupdateflowforresult(appupdateinfo,updateTepy,Activity,constantants.in_app_update_request_code)}}}}}}}

在“onActivityResult”中

当(结果){constants.in_app_update_request_code  - > {何时(resuctCode){ascuestive.result_canceled  - > {updatemanager.unregisterListener()// store更新版本在SharedPrefs中拒绝的版本} ActivityResult.Result_in_App_update_Failed  - > {//通知用户下载通过snackbar}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

3.开始更新

一旦我们确认一个更新是可用的,这是第一次提示用户更新到这个版本,我们可以继续实际下载。打电话startUpdateFlowForResult公司将启动下载和InstallStateUpdatedListener我将倾听结果。我们实现了一个自定义snackbar来通知用户下载的状态,并允许用户安装更新。

val flexibleUpdateListener:InstallStateUpdatedListener=对象:InstallStateUpdatedListener{override fun onStateUpdate(installState:installState?){val installStatus=安装状态?。installStatus()val currentUpdateType=updateType if(installStatus!=null&¤tUpdateType!=空){activity.showinappinstallupdatesnakbar(installStatus,currentUpdateType)}

结论

实现应用内更新可以使开发人员和用户的更新过程无缝衔接。作为开发者,我们现在有了一种更可配置的方式来建议或要求用户更新他们的应用程序。对于用户来说,如果他们现在有自由选择是立即更新还是在后台更新-允许他们继续使用产品而不错过我们伟大的新功能,最重要的是找到他们的完美匹配。
快乐的海绵宝宝