Firebase - 远程配置应用程序更新
Firebase - Remote Config App Update
我正在使用 Firebase Remote Config 通过对话框提醒用户有新的应用程序更新。如果用户更新应用程序,我如何处理用户已更新并且不再推送用户更新?
这是我的 UpdateHelper
class:
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;
}
}
我的 class 扩展应用程序:
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用户属性
有一个非常简单的版本可以做到这一点。只需按照以下步骤
- 只需在 Firebase 远程配置面板上保存您应用的最新版本代码
- 每当应用程序打开时获取该版本代码值
与app当前版本号对比,可以
通过以下代码获取
private int getCurrentVersionCode() {
try {
return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return -1;
}
如果获取的版本号大于当前版本,
显示 AlertDialog
要求更新应用程序。否则,应用程序已经更新。
因此,无论何时推出新版本,都需要将新版本
Firebase 远程配置面板中的版本代码
您可以在 how to force users to update the app using Firebase Remote Config
上阅读整个教程
我正在使用 Firebase Remote Config 通过对话框提醒用户有新的应用程序更新。如果用户更新应用程序,我如何处理用户已更新并且不再推送用户更新?
这是我的 UpdateHelper
class:
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;
}
}
我的 class 扩展应用程序:
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用户属性有一个非常简单的版本可以做到这一点。只需按照以下步骤
- 只需在 Firebase 远程配置面板上保存您应用的最新版本代码
- 每当应用程序打开时获取该版本代码值
与app当前版本号对比,可以 通过以下代码获取
private int getCurrentVersionCode() { try { return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; } catch (NameNotFoundException e) { e.printStackTrace(); } return -1; }
如果获取的版本号大于当前版本, 显示
AlertDialog
要求更新应用程序。否则,应用程序已经更新。因此,无论何时推出新版本,都需要将新版本 Firebase 远程配置面板中的版本代码
您可以在 how to force users to update the app using Firebase Remote Config
上阅读整个教程