Java Firebase-远程配置应用程序更新

Java Firebase-远程配置应用程序更新,java,android,firebase,firebase-remote-config,Java,Android,Firebase,Firebase Remote Config,我正在使用Firebase Remote Config通过一个对话框提醒用户新的应用程序更新。如果用户更新应用程序,我如何处理用户已更新且不再推动用户更新的情况 这是我的UpdateHelper类: public class UpdateHelper { public static String KEY_UPDATE_ENABLE = "isUpdate"; public static String KEY_UPDATE_VERSION = "version"; public static S

我正在使用Firebase Remote Config通过一个对话框提醒用户新的应用程序更新。如果用户更新应用程序,我如何处理用户已更新且不再推动用户更新的情况

这是我的
UpdateHelper
类:

public class UpdateHelper {

public static String KEY_UPDATE_ENABLE = "isUpdate";
public static String KEY_UPDATE_VERSION = "version";
public static String KEY_UPDATE_URL = "force_update_store_url";

public interface onUpdateCheckListener{
    void onUpdateCheckListener(String urlApp);
}
public static Builder with(UpdateHelper.onUpdateCheckListener context) {
    return new Builder(context);
}

private onUpdateCheckListener onUpdateCheckListener;
private Context context;

public UpdateHelper(UpdateHelper.onUpdateCheckListener onUpdateCheckListener, UpdateHelper.onUpdateCheckListener context){
    this.onUpdateCheckListener = onUpdateCheckListener;
    this.context = (Context) context;
}

public void check(){
    FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
    if(remoteConfig.getBoolean(KEY_UPDATE_ENABLE)){
        String currentVersion = remoteConfig.getString(KEY_UPDATE_VERSION);
        String appVersion = getAppVersion(context);
        String updateUrl = remoteConfig.getString(KEY_UPDATE_URL);

        if (!TextUtils.equals(currentVersion, appVersion) && onUpdateCheckListener !=null)
            onUpdateCheckListener.onUpdateCheckListener(updateUrl);
    }
}
private String getAppVersion(Context context) {
    String resuult = "";

    try {
        resuult = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
        resuult = resuult.replaceAll("[a-zA-z] |-", "");
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return resuult;
}

public static class Builder{
    private UpdateHelper.onUpdateCheckListener context;
    private onUpdateCheckListener onUpdateCheckListener;

    public Builder(UpdateHelper.onUpdateCheckListener context) {
        this.context = context;
    }

    public Builder onUpdateCheck(onUpdateCheckListener onUpdateCheckListener){
        this.onUpdateCheckListener = onUpdateCheckListener;
        return this;
    }

    public UpdateHelper build(){
        return new UpdateHelper(context, onUpdateCheckListener);
    }

    public UpdateHelper check() {
        UpdateHelper updateHelper = build();
        updateHelper.check();

        return  updateHelper;
    }
}
扩展应用程序的我的类:

 public void onCreate() {
    super.onCreate();

    final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();

    // Default value
    Map<String, Object> defaultValue = new HashMap<>();
    defaultValue.put(UpdateHelper.KEY_UPDATE_ENABLE, false);
    defaultValue.put(UpdateHelper.KEY_UPDATE_VERSION, "1.0");
    defaultValue.put(UpdateHelper.KEY_UPDATE_URL, "https://play.google.com/store/apps/details?id=com.mallcommapp.toolboxgroup");

    remoteConfig.setDefaults(defaultValue);
    //fetch data from Firebase every 5 seconds, ideally 1 minute - 5mins etc
    remoteConfig.fetch(5).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful()){
                remoteConfig.activateFetched();

            }
        }
    });

您可以在firebase控制台上添加条件。因此,您的新配置只影响已分配的用户。例如,我在我的应用程序中添加了app_version用户属性,您可以在firebase控制台上添加条件。因此,您的新配置只影响已分配的用户。例如,我在我的应用程序中添加了app_version user属性,这是一个非常简单的版本。只需遵循以下步骤

  • 只需在Firebase远程配置面板上保存应用程序的最新版本代码
  • 每次打开应用程序时获取该版本代码值
  • 将其与应用程序的当前版本代码进行比较,您可以 通过以下代码获取

    private int getCurrentVersionCode() {
        try {
            return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return -1;
    }
    
  • 如果获取的版本代码大于当前版本, 显示请求更新应用程序的
    警报对话框
    。否则,应用程序已经更新

  • 因此,无论何时推出新版本,都需要将新版本 Firebase远程配置面板中的版本代码


  • 你可以在

    上阅读整个教程,有一个非常简单的版本可以做到这一点。只需遵循以下步骤

  • 只需在Firebase远程配置面板上保存应用程序的最新版本代码
  • 每次打开应用程序时获取该版本代码值
  • 将其与应用程序的当前版本代码进行比较,您可以 通过以下代码获取

    private int getCurrentVersionCode() {
        try {
            return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return -1;
    }
    
  • 如果获取的版本代码大于当前版本, 显示请求更新应用程序的
    警报对话框
    。否则,应用程序已经更新

  • 因此,无论何时推出新版本,都需要将新版本 Firebase远程配置面板中的版本代码


  • 你可以在

    上阅读整个教程,好的,谢谢,在我的控制台中,我有“version”作为参数,条件是什么?我创建了自定义用户属性(“app_version”),然后在我的应用程序中设置它,并在firebase控制台上显示为用户属性。我在我的条件下使用了它。好的,我在Firebase中设置了一个用户属性“app_version”,我的应用程序应该在其中声明这个?抱歉,只是想得到一个完整的understanding@Dan530c您只需将应用程序的版本发送到firebase,如FirebaseAnalytics.getInstance(this).setUserProperty(“app_version”,“3.2.1”);好的,在我的主要活动中,我添加了“公共静态FirebaseAnalytics mFirebaseAnalytics”;在我的onCreate中添加了“mFirebaseAnalytics=FirebaseAnalytics.getInstance(this)”,然后添加了“公共静态FirebaseAnalytics getmFirebaseAnalytics(){mFirebaseAnalytics.setUserProperty(“应用程序版本”,“1.0.3”);返回mFirebaseAnalytics;}”这是正确的吗?好的,谢谢,在我的控制台中,我有“version”作为参数,条件是什么样的?我创建了自定义用户属性(“app_version”),然后在我的应用程序中设置它,并在firebase控制台上显示为用户属性。我在我的条件下使用了它。好的,我在Firebase中设置了一个用户属性“app_version”,我的应用程序应该在其中声明这个?抱歉,只是想得到一个完整的understanding@Dan530c您只需将应用程序的版本发送到firebase,如FirebaseAnalytics.getInstance(this).setUserProperty(“app_version”,“3.2.1”);好的,在我的主要活动中,我添加了“公共静态FirebaseAnalytics mFirebaseAnalytics”;在我的onCreate中添加了“mFirebaseAnalytics=FirebaseAnalytics.getInstance(this)”,然后添加了“公共静态FirebaseAnalytics getmFirebaseAnalytics(){mFirebaseAnalytics.setUserProperty(“应用程序版本”,“1.0.3”);返回mFirebaseAnalytics;}”这是正确的吗?谢谢你的指导,非常棒!谢谢你的指导,太棒了!