如何导出所有 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 中的所有键和值?