簡體   English   中英

Firebase-遠程配置應用程序更新

[英]Firebase - Remote Config App Update

我正在使用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;
    }
}

我的類擴展了Application:

 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();

            }
        }
    });

我的MainActivity.java:

UpdateHelper.with(this).onUpdateCheck(this).check();
}
@Override
public void onUpdateCheckListener(final String urlApp) {
// Create alert dialog
    AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("New App Version Available").setMessage("Please update to use all the latest features and bug fixes").setPositiveButton("UPDATE", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int which) {
            redirectStore(urlApp);
        }
    }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
         dialogInterface.dismiss();
        }
    }).create();
    alertDialog.show();
}

private void redirectStore(String urlApp) {
    final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlApp));
    intent.addFlags((Intent.FLAG_ACTIVITY_NEW_TASK));
    startActivity(intent);
}

您可以在Firebase控制台上添加條件。 因此,您的新配置僅影響適當的用戶。 例如,我在應用程序中添加了app_version用戶屬性

有一個很簡單的版本可以做到這一點。 只需按照以下步驟

  1. 只需在Firebase遠程配置面板上保存您應用的最新版本代碼
  2. 每當打開應用程序時,獲取該版本代碼值
  3. 將其與應用程序的當前版本代碼進行比較,您可以通過以下代碼獲得

     private int getCurrentVersionCode() { try { return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; } catch (NameNotFoundException e) { e.printStackTrace(); } return -1; } 
  4. 如果獲取的版本代碼大於當前版本,請顯示AlertDialog要求更新應用程序。 否則,該應用程序已更新。

  5. 因此,每當推出新版本時,都需要將該新版本代碼放入Firebase遠程配置面板中

您可以閱讀有關如何使用Firebase Remote Config強制用戶更新應用程序的整個教程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM