如何导出所有firebase远程配置键和值?

时间:2017-10-13 06:53:09

标签: android firebase firebase-remote-config

我想从现有的firebase项目迁移到新的firebase项目 问题是我在现有项目中有很多远程配置键和值 现在我想导出所有远程配置键和值,然后导入到新的firebase项目,而不是在新项目中再写一遍。

有没有简单的方法呢?

5 个答案:

答案 0 :(得分:4)

您无法从Firebase控制台执行此操作,但您可以编写一个使用远程配置REST API的简单脚本 - https://firebase.google.com/docs/remote-config/use-config-rest

基本上,您可以从一个项目下载远程配置,然后以编程方式将其上传到新项目中。

干杯!

答案 1 :(得分:0)

我找到了一个解决方案,但没试过。

https://github.com/epool/firebase-cloning-tool

答案 2 :(得分:0)

mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(this, task -> {
                if (task.isSuccessful()) {
                    mFirebaseRemoteConfig.activateFetched();
                    Map<String, String> map =  getFirebaseRemoteMap(context,R.xml.defultValues);
                    //map contains all remote values   
                }
            });

确保已在defaultValue文件中定义了所有键,activateFetched成功后,您将能够转储所有远程值

    public Map<String, String> getFirebaseRemoteMap(Context context, @XmlRes int xmlRes) {
    Map<String, String> stringStringMap = new HashMap<>();
    XmlResourceParser xmlResourceParser = context.getResources().getXml(xmlRes);
    try {
        boolean isInKeyTag = false;
        while (xmlResourceParser.getEventType() != XmlResourceParser.END_DOCUMENT) {
            if (xmlResourceParser.getEventType() == XmlResourceParser.START_TAG) {
                String tagName = xmlResourceParser.getName();
                if (tagName.equals("key")) {
                    isInKeyTag = true;
                }
            }
            if (xmlResourceParser.getEventType() == XmlResourceParser.END_TAG) {
                String tagName = xmlResourceParser.getName();
                if (tagName.equals("key")) {
                    isInKeyTag = false;
                }
            }
            if (xmlResourceParser.getEventType() == XmlResourceParser.TEXT) {
                if (isInKeyTag) {
                    String key = xmlResourceParser.getText();
                    FirebaseRemoteConfigValue val = FirebaseRemoteConfig.getInstance().getValue(key);
                    String s = val.asString();
                    stringStringMap.put(key, s);
                }
            }
            xmlResourceParser.next();
        }

        return stringStringMap;
    } catch (Exception e) {
        return null;
    }
}

答案 3 :(得分:0)

您可以按以下方式获取远程配置键和值(Swift 4.2):

let remoteConfig = RemoteConfig.remoteConfig()
let ns = NamespaceGoogleMobilePlatform // Oddly evaluates to: "configns:firebase" including spelling mistake

let remoteKeys = remoteConfig.allKeys(from: .remote, namespace: ns)
let remoteDict = Dictionary(uniqueKeysWithValues: remoteKeys.map { ($0, remoteConfig[$0].stringValue) })

let defaultKeys = remoteConfig.allKeys(from: .default, namespace: ns)
let defaultDict = Dictionary(uniqueKeysWithValues: defaultKeys.map { ($0, remoteConfig[$0].stringValue) })

let staticKeys = remoteConfig.allKeys(from: .static, namespace: ns)
let staticDict = Dictionary(uniqueKeysWithValues: staticKeys.map { ($0, remoteConfig[$0].stringValue) })

在简短的搜索中,我无法获得平坦的remoteConfig键和值(即,使用下标remoteConfig[key]时返回的内容)。我猜您只需要将远程值覆盖在默认值上即可?

答案 4 :(得分:0)

我知道已经回答了,但是我碰到了。找到了简单的方法

remoteConfigInstance?.let {
    it.fetchAndActivate().addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val result = task.result
            Timber.d("RemoteConfig - updated=$result")
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                it.all.forEach { (t, _) ->
                    Timber.i( "All remoteConfig values = $t - ${it.getBoolean(t)}")
                }
            }
        } else {
            Timber.e("RemoteConfig - ERROR fetching ..")
        }
    }
}