web-dev-qa-db-ja.com

Firebase Remote configに配列を宣言できますか?

私はAndroidおよびFirebaseの初心者です。FirebaseRemote Configのパラメーターキー内で配列を宣言することは可能ですか? enter image description here

特定のモデル/モバイルデバイスにプロモーションを提供したい。したがって、一連のモデル(つまり、Samsung J5、Xiaomi Note2など)を宣言できれば、それらのモデルのプロモーションを簡単に有効にすることができます。私を助けてください。

14
Munir Hoque

Remote Configは最近、JSON形式で保存することによってキーと値のリストを保存するオプションを追加しました。

enter image description here

使用例:

1. Remote Configに保存されたJSON:

 [
      {
        "lesson": "1",
        "versionCode": 2
      },
      {
        "lesson": "2",
        "versionCode": 4
      },
      {
        "lesson": "3",
        "versionCode": 1
      }
    ]
  1. Kotlinモデル

    データクラス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());
14
android_dev

Firebase Remote Configのすべての値は、最終的に文字列として保存されます。ブール値、数値などはすべて文字列にまとめられます。 SDKは、他のタイプとして要求されたときに、その文字列値を解析するだけです。

Remote Configには「ネイティブ」配列はありません。 Remote Configパラメーターで一連の順序付けされた値が必要な場合は、文字列値(JSONまたはいくつかの単純な区切り文字列など)から解析できる方法で値を表す必要があります。

12
Doug Stevenson

Doug's と同じですが、コードが含まれます。

これは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
_
4
N Kuria

私は N Kuria's の回答が好きですが、jsonの空白が正確である必要があります。もう少しフォールトトレランスが必要な場合は、JSONSerializationを介してintの配列を読み取るコードを次に示します。

あなたのjsonにこのintの配列があったとしましょう:

 {
     "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
}

または、クラス型の値を読み取る場合は、辞書を列挙し、反復ごとに配列に追加することもできます。 (最初のリターンの下のコメントを参照してください。)

2
compilererror