你不能拼写更新没有日期-指南,让用户更新到您的最新版本

18188博金宝电子体育频道8bet金宝搏官网OkCupid的Android团队每周都会发布新功能和bug修复。在很短的时间内,应用的性能、用户体验甚至收益都会有所提高。当然,我们希望尽可能多的用户能够获得这些改进,但每周更新应用似乎有些过分,并不是所有用户都启用了自动更新功能。在谷歌的Play Core库支持App更新之前和之后,我们已经实现了这个问题的解决方案。

在应用程序的开始,我们发出一个网络请求来初始化体验。用户所在的当前版本作为参数传递给该请求,响应中包含一个布尔标志,指示是否应该强制更新。当我们决定增加强制版本时,依赖这个字段需要web开发人员手动更新那个布尔值的条件。它还依赖于我们确保当前版本参数的值是最新的。
如果forceUpdate = = true
,用户将以模态提出,将它们重定向到我们的应用程序播放商店列表中。
乐趣openPlayStore () {
Val Intent = Intent(Intent.action_View)
意图。data = Uri.parse (Constants.PLAY_STORE_LINK)
startActivity(意图)
}
谷歌的Play Core库现在支持应用更新。看看这些文件在这里来看看安装需要什么。
为了实现更新流,我们必须执行以下操作;
1.决定我们是否想要
- 强制用户更新
- 建议更新
- 没做什么
为了做出这个决定,我们使用Firebase Remote Config。Firebase授予Android团队更188博金宝电子体育频道改属性以进行更新的能力,而无需依赖于另一个团队对API的更改。app中指定的update属性的值是NO_UPDATE, IMMEDIATE_UPDATE或FLEXIBLE_UPDATE。用户登录后,我们检查Firebase,看看是否应该提示更新。
fun prompupdate (none: Optional.None) {
val versionFromFirebase =
firebaseremoteconfig
.getInstance ()
.getString(FirebaseConstants.in_app_update_property)
如果(versionFromFirebase.isNotEmpty ()) {
val updateType = Integer.valueOf(versionFromFirebase)
if (updateType != firebaseconconstants . no_update) {
updatemanager.checkifupdateisavailable(UpdateType,此)
}
}
}
2.查看play store获取更多的当前版本
这个程序库通过看起来很神奇的方式来决定是否有一个更最新的应用程序版本在play store上。在测试时,请使用与应用在play store上相同的发行版本。另外,要硬编码用于测试的APK的以前版本。
fun checkIfUpdateIsAvailable(updateType: Int, listener: UpdateCheckListener){
appupdateinfotask.addonsuccessListener {appupdateinfo - >
如果(appUpdateInfo.updateAvailability () = = UpdateAvailability。UPDATE_AVAILABLE & &
appupdateinfo.isupdateTypeAleLed(UpdateType)
) {
updateAvailable = appUpdateInfo.availableVersionCode ()
listener.onupdateavailable(appupdateinfo)
}
}
}
如果有一个更新的版本可供下载,我们只是想建议一个更新,我们想确保我们没有纠缠用户更新到相同的版本之前。如果我们强制更新,用户将没有选择退出的选项。每次提示用户更新时,我们将版本号存储在共享首选项中,并在再次提示用户之前检查该值。如果他们之前没有拒绝更新,那么我们就会提示下载更新。您可以在您的活动中侦听提示的结果onActivityResult
.
fun onUpdateAvailable(appUpdateInfo: appUpdateInfo) {
val lastUpdateVersionDenied = //存储在sharedprefs中的值
val userdeniedcurrenupdate = (lastUpdateVersionDenied == updateAvailable)
if(!userdeniedcurrentupdate){
//如果updateType是FLEXIBLE,则该方法将提供下载选项;如果updateType是IMMEDIATE,则要求更新
appUpdateManager.startUpdateFlowForResult (
appUpdateInfo,
updateType,
活动,
entionant.in_app_update_request_code.
)
}
}
“onActivityResult”
什么时候(结果){
entionants.in_app_update_request_code - > {
什么时候(questecode){
活动。RESULT_CANCELED - > {
updatemanager.unRegisterListener()
//存储在SharedPrefs中拒绝的更新版本
}
ActivityResult.result_in_app_update_failed - > {
//通知用户通过小吃栏下载失败
}
}
}
一旦我们确认一个更新是可用的,这是用户第一次被提示更新到这个版本,我们可以继续实际的下载。调用startUpdateFlowForResult
将开始下载和InstallStateUpdatedListener
将倾听结果。我们实现了一个自定义的小吃条来通知用户下载的状态,并允许用户安装更新。
val flexibleUpdateListener: InstallStateUpdatedListener =对象:InstallStateUpdatedListener {
override fun onStateUpdate(installState: installState ?) {
val installStatus = installState?
val currentUpdateType = updateType
if (installStatus != null && currenttupdatetype != null) {
活动。showInAppInstallUpdateSnackbar (installStatus currentUpdateType)
}
}
结论
在应用程序更新中实现,使更新过程无缝为开发人员和用户。作为开发人员,我们现在拥有更可配置的方式来建议或要求用户更新其应用程序。对于用户而言,如果他们现在可以在更新之间或在后台进行更新之间的自由度 - 允许他们继续使用产品而不会错过我们的新功能,并且最重要的是找到完美的匹配。

最初出版https://tech.188bet金宝搏官网okcupid.com2019年12月20日。