使用Firebase RemoteConfig强制更新Android应用程序版本不总是有效
我正在开发一个Android应用程序,每天有大约3000名活动用户 我们可以选择使用Firebase RemoteConfig强制更新应用程序。 例如,如果我们认为最低版本应为1.62,我们将更改Firebase的远程参数,如果用户有较旧的版本,则会在会话开始时出现一个对话框,迫使用户转到Play Store并更新应用程序 它在大多数情况下都能工作,但大约1%的用户能够在不看到对话框的情况下使用该应用程序。 我曾多次尝试重现该问题,但始终无法重现,如果构建版本早于所需版本,则对话框总是出现在我眼前 以下是与此相关的代码: 在MainActivity的onCreate()中,在检查用户是否具有连接后(如果用户没有连接,我们不允许使用应用程序) 对于needsUpdate()方法,捕获每天只发生两三次左右使用Firebase RemoteConfig强制更新Android应用程序版本不总是有效,android,firebase,firebase-remote-config,Android,Firebase,Firebase Remote Config,我正在开发一个Android应用程序,每天有大约3000名活动用户 我们可以选择使用Firebase RemoteConfig强制更新应用程序。 例如,如果我们认为最低版本应为1.62,我们将更改Firebase的远程参数,如果用户有较旧的版本,则会在会话开始时出现一个对话框,迫使用户转到Play Store并更新应用程序 它在大多数情况下都能工作,但大约1%的用户能够在不看到对话框的情况下使用该应用程序。 我曾多次尝试重现该问题,但始终无法重现,如果构建版本早于所需版本,则对话框总是出现在我眼
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()
非常感谢你
干杯,
毛里西奥
/**
* 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()
}
}
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;
}