Могу ли я объявить массив в Firebase Remote config?

Я новичок в Android и Firebase. Можно ли объявить массив внутри ключа Parameter Firebase Remote Config? введите описание изображения здесь

Я хочу сделать акцию на некоторых конкретных моделях / мобильных устройствах. Так что, если бы я мог объявить ряд моделей (i, e, Samsung J5, Xiaomi Note2 и т. Д.), Я мог бы легко включить рекламные акции для этих моделей. Помогите, пожалуйста.


person Munir Hoque    schedule 13.02.2017    source источник
comment
Вы можете передать его как строку, а затем преобразовать в массив на стороне клиента, разделив его.   -  person Dexter    schedule 13.02.2017
comment
Я бы рекомендовал добавить новую пару параметр - значение, например: Ключ параметра: model_for_promotion Значение: Samsung J5, Xiaomi Note2.   -  person TOP    schedule 13.02.2017
comment
@Dexter, ты имеешь в виду, что мне нужно добавить параметры для каждой модели?   -  person Munir Hoque    schedule 13.02.2017
comment
@TOP, понял ваше предложение. Позвольте мне сначала попробовать. спасибо   -  person Munir Hoque    schedule 13.02.2017


Ответы (5)


В Remote Config недавно добавлена ​​возможность сохранять список значений ключей, сохраняя его в формате JSON.

введите описание изображения здесь

Пример использования:

1.Json хранится в удаленных конфигурациях:

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

2.Модель Котлина

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());
person android_dev    schedule 20.01.2019
comment
Как мне это прочитать? Нить? Ценить? ByteArray? ключ: ARRAY_CODE значение: {leccion: 1, versionCode: 2} mFirebaseRemoteConfig.getString (ARRAY_CODE); - person Cristofer; 10.02.2019
comment
Я пытался читать как String, но не смог правильно его разобрать? У вас есть код, который вы используете для синтаксического анализа String в JSON, как вы извлекаете объекты различия? Пример: [{урок: 1, код версии: 2}, {урок: 2, код версии: 4}, {урок: 3, код версии: 1}] - person Cristofer; 13.02.2019
comment
@Cristofer Я обновил свой ответ примером использования вашего примера - person android_dev; 13.02.2019

Все значения в Firebase Remote Config в конечном итоге хранятся в виде строк. Логические значения, числа и т. Д. Сводятся к строкам. SDK просто проанализирует это строковое значение, когда вы запросите другой тип.

В Remote Config нет «родных» массивов. Если вам нужна последовательность упорядоченных значений в параметре Remote Config, вы должны представить его таким образом, чтобы его можно было проанализировать из строкового значения (например, JSON или некоторые простые строки с разделителями).

person Doug Stevenson    schedule 13.02.2017

То же, что и ответ Дуга, но с кодом.

Это в 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
person N Kuria    schedule 22.11.2017

Мне нравится ответ N Kuria, но для этого требуется, чтобы пробел в вашем json был точным. Если вам нужно что-то более отказоустойчивое, вот код для чтения в массиве int через 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
}

В качестве альтернативы, если вы читали значения типа класса, вы могли бы просто перечислить словарь и добавить его к массиву с каждой итерацией. (См. Комментарий под первым ответом.)

person compilererror    schedule 08.03.2019

Я бы также порекомендовал JSON - так как вы можете обнаруживать какие-то ошибки при разборе JSON. С разделением вы никогда не узнаете, привел ли он к правильному массиву.

person Mayank Jain    schedule 18.12.2017
comment
это должно быть дано как комментарий, а не как ответ ... так что голосование против - person al_mukthar; 12.12.2018