使用Firebase RemoteConfig强制更新Android应用程序版本不总是有效

使用Firebase RemoteConfig强制更新Android应用程序版本不总是有效,android,firebase,firebase-remote-config,Android,Firebase,Firebase Remote Config,我正在开发一个Android应用程序,每天有大约3000名活动用户 我们可以选择使用Firebase RemoteConfig强制更新应用程序。 例如,如果我们认为最低版本应为1.62,我们将更改Firebase的远程参数,如果用户有较旧的版本,则会在会话开始时出现一个对话框,迫使用户转到Play Store并更新应用程序 它在大多数情况下都能工作,但大约1%的用户能够在不看到对话框的情况下使用该应用程序。 我曾多次尝试重现该问题,但始终无法重现,如果构建版本早于所需版本,则对话框总是出现在我眼

我正在开发一个Android应用程序,每天有大约3000名活动用户

我们可以选择使用Firebase RemoteConfig强制更新应用程序。 例如,如果我们认为最低版本应为1.62,我们将更改Firebase的远程参数,如果用户有较旧的版本,则会在会话开始时出现一个对话框,迫使用户转到Play Store并更新应用程序

它在大多数情况下都能工作,但大约1%的用户能够在不看到对话框的情况下使用该应用程序。 我曾多次尝试重现该问题,但始终无法重现,如果构建版本早于所需版本,则对话框总是出现在我眼前

以下是与此相关的代码:

在MainActivity的onCreate()中,在检查用户是否具有连接后(如果用户没有连接,我们不允许使用应用程序)

对于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()

非常感谢你

干杯, 毛里西奥

    /**
     * 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;
}