我想从现有的firebase项目迁移到新的firebase项目 问题是我在现有项目中有很多远程配置键和值 现在我想导出所有远程配置键和值,然后导入到新的firebase项目,而不是在新项目中再写一遍。
有没有简单的方法呢?
答案 0 :(得分:4)
您无法从Firebase控制台执行此操作,但您可以编写一个使用远程配置REST API的简单脚本 - https://firebase.google.com/docs/remote-config/use-config-rest
基本上,您可以从一个项目下载远程配置,然后以编程方式将其上传到新项目中。
干杯!
答案 1 :(得分:0)
我找到了一个解决方案,但没试过。
答案 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 ..")
}
}
}