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

Posted

技术标签:

【中文标题】如何导出所有 Firebase 远程配置键和值?【英文标题】:How to export all firebase remote config keys and values? 【发布时间】:2018-03-25 05:55:03 【问题描述】:

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

有什么简单的方法吗?

【问题讨论】:

【参考方案1】:

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

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

干杯!

【讨论】:

谢谢,Mayank,当我问这个问题时,这个 API 不存在,现在他们添加了它 有没有办法使用该端点而无需设置 GoogleAuthentication 服务?我没有 java、ruby 或 python 环境设置,这样做并将第三方库集成到其中以便我可以从 bash 运行 curl 命令并不是那么简单。【参考方案2】:

您可以按如下方式获取远程配置键和值(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])。我猜你只需要将远程值覆盖在默认值上?

【讨论】:

【参考方案3】:
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;
    

【讨论】:

activateFetched 现已弃用【参考方案4】:

我找到了解决方案,但没有尝试。

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

【讨论】:

【参考方案5】:

我知道这个问题已经得到解答,但我只是遇到了这个问题。找到了一个简单的方法

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 ..")
        
    

【讨论】:

为什么要添加检查安卓版本?仅用于全部使用?

以上是关于如何导出所有 Firebase 远程配置键和值?的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑:如何测试对象键和值?

如何在 Android 中打印 HashMap 中的所有键和值?

如何在javascript中获取redis中的所有键和值?

如何在 ngFor 中显示一个简单 json 的所有键和值? [复制]

如何获取与php数组中的键和值相关的所有数组值

如何在 .Net 应用程序中查看所有存储的会话的 REDIS 键和值?