24

我是 Android 和 Firebase 的新手。是否可以在 Firebase 远程配置的 Parameter 键中声明一个数组? 在此处输入图像描述

我想为某些特定型号/移动设备提供一些促销活动。因此,如果我可以声明一系列模型(即三星 J5、小米 Note2 等),我可以轻松地在这些模型上启用促销。请帮我。

4

5 回答 5

30

远程配置最近添加了通过将键值列表保存为 JSON 格式来保存键值列表的选项。

在此处输入图像描述

示例用法:

1.Json存储在Remote Configs中:

 [
      {
        "lesson": "1",
        "versionCode": 2
      },
      {
        "lesson": "2",
        "versionCode": 4
      },
      {
        "lesson": "3",
        "versionCode": 1
      }
 ]

2.Kotlin模型

data class Lesson(val lesson: Int, val versionCode: Int)

3.获取json

String object = FirebaseRemoteConfig.getInstance().getString("test_json");
Gson gson = new GsonBuilder().create();
List<Lesson> lessons = gson.fromJson(object, new TypeToken<List<Lesson>>(){}.getType());
于 2019-01-20T18:55:59.277 回答
14

Firebase 远程配置中的所有值最终都存储为字符串。布尔值、数字等都归结为字符串。当您请求其他类型时,SDK 只会解析该字符串值。

远程配置中没有“本机”数组。如果您想要远程配置参数中的一系列有序值,您应该以可以从字符串值解析的方式表示它(例如 JSON 或一些简单的分隔字符串)。

于 2017-02-13T16:34:11.443 回答
4

道格的答案相同,但带有代码。

这是在 Swift 中,但你仍然应该了解它。

对于数组,使用分隔字符串,例如

"iron,wood,gold"并使用将其拆分为字符串数组.components(separatedBy: ",")

对于字典,使用“双重”分隔的字符串,例如

"iron:50, wood:100, gold:2000"

使用将其转换为字典

    var actualDictionary = [String: Int]()

    // Don't forget the space after the comma
    dictionaryString.components(separatedBy: ", ").forEach({ (entry) in
    let keyValueArray = entry.components(separatedBy: ":")
            return actualDictionary[keyValueArray[0]] = Int(keyValueArray[1])
    })

    return actualDictionary
于 2017-11-22T12:42:40.173 回答
2

我喜欢N Kuria 的回答,但这需要你的 json 中的空格是准确的。如果你想要更多容错的东西,这里是通过 JSONSerialization 读取 int 数组的代码。

假设您的 json 中有这个整数数组:

 {
     "array": [1, 5, 4, 3]
 }
func getArray() -> [Int] {

    let jsonString = "{\"array\": [1, 5, 4, 3]}"
    let array = [Int]()

    guard let data = jsonString.data(using: .utf8) else { return array }
    if let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) {
        guard let theArray = json as? [String: [Int]] else { return array }
        return theArray.first?.value ?? array

        // If you were reading in objects instead of ints, you would do
        // for (key, value) in theArray { /* append values to array */ }
    }

    return array
}

或者,如果您正在读取类类型的值,则可以仅枚举字典并在每次迭代时附加到数组中。(请参阅第一次返回下方的评论。)

于 2019-03-08T18:57:38.450 回答
-1

我还推荐 JSON - 因为您可以在解析 JSON 时进行某种错误检测。通过拆分,您永远不会知道这是否导致了正确的数组。

于 2017-12-18T18:31:03.733 回答