如何解决使用 Firebase RemoteConfig 强制更新 Android 应用版本并不总是有效
我正在开发一个每天有大约 3000 个活动用户的 Android 应用程序。
我们可以选择使用 Firebase RemoteConfig 强制更新应用。 如果我们认为最低版本应该是,例如1.62,我们改变Firebase的远程参数,如果用户有旧版本,会话开始时会出现一个对话框,迫使用户去Play商店并更新应用。
它适用于大多数情况,但大约 1% 的用户能够在没有看到该对话框的情况下使用该应用程序。 我试图多次重现该问题,但我一直无法重现,如果我的 buildVersion 比所需的旧,对话框总是出现在我面前。
这是与此相关的代码:
在 MainActivity 的 onCreate() 中,在检查用户是否有连接后(如果用户没有连接,我们不允许使用该应用程序)...
/**
* Initializes RemoteConfig for the project. If the connection with the remote config server
* is successfully,starts checkVersionUpdate().
*/
fun initRemoteConfig() {
val firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
val remoteConfigDefaults: MutableMap<String,Any> = HashMap()
firebaseRemoteConfig.setDefaultsAsync(remoteConfigDefaults)
firebaseRemoteConfig.fetch(IMMEDIATE_FETCH).addOnCompleteListener {
if (it.isSuccessful) {
firebaseRemoteConfig.activate().addOnCompleteListener { it2 ->
if (it2.isSuccessful) {
checkVersionUpdate()
}
}
}
}
}
checkVersionUpdate()方法,参数update_required一直为true...
/**
* Checks if there is a new version of SagaCollect available,if its true,forces the
* user to download it,otherwise opens LoginFragment.
*/
private fun checkVersionUpdate() {
val firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
val remoteVersionUpdate = firebaseRemoteConfig.getString(Constants.KEY_CURRENT_VERSION)
val result = VersionUtils.needsUpdate(BuildConfig.VERSION_NAME,remoteVersionUpdate) &&
firebaseRemoteConfig.getBoolean(Constants.KEY_UPDATE_REQUIRED)
if (result && !mainView.isFinishing) {
mainView.showNewVersionAvailable()
} else {
mainView.openLogin()
}
}
还有needsUpdate() 方法,捕获每天只发生大约两到三次......
public static boolean needsUpdate(final String currentVersion,final String serverVersion) {
boolean result;
try {
final String[] preparedCurrentVersion = currentVersion.split(DOT);
final String[] preparedServerVersion = serverVersion.split(DOT);
final int leftNumberCurrentVersion = Integer.parseInt(preparedCurrentVersion[LEFT]);
final int leftNumberServerVersion = Integer.parseInt(preparedServerVersion[LEFT]);
final int rightNumberCurrentVersion = Integer.parseInt(preparedCurrentVersion[RIGHT]);
final int rightNumberServerVersion = Integer.parseInt(preparedServerVersion[RIGHT]);
result = leftNumberServerVersion > leftNumberCurrentVersion ||
(leftNumberServerVersion == leftNumberCurrentVersion &&
rightNumberServerVersion > rightNumberCurrentVersion);
} catch (final Exception e) {
result = true
}
return result;
}
关于用户如何进入应用程序并能够打开登录并继续会话的任何想法? 我们有事件并且我们知道它们打开了应用程序,因此它们肯定会通过 MainActivity 的 onCreate()。
非常感谢。
干杯, 毛里西奥
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。