离线启动应用时Firebase Remote Config本地plist的字符串数组值无法读取
Firebase Remote Config 本地plist字符串/数组类型默认值读取异常解决方案
可行解决建议
- 修正取值逻辑,适配本地plist默认值读取规则
Firebase Remote Config的jsonValue属性仅对远端拉取并完成JSON序列化的配置生效,本地plist中的字符串、数组类型默认值不会触发自动序列化,直接调用jsonValue会返回空,需补充对应原生类型的取值逻辑:- 字符串类型取值优先调用
.stringValue属性读取本地plist默认值,优先级高于jsonValue as? String - 数组类型取值优先判断
.arrayValue属性读取plist原生数组类型,若存储为逗号分隔字符串则调用.stringValue拆分。
- 字符串类型取值优先调用
- 调整初始化顺序
部分版本Firebase SDK存在初始化顺序异常导致非基础类型默认值加载失败,将设置默认值的操作放到配置项赋值完成后执行,修正后初始化代码:
let settings = RemoteConfigSettings() settings.minimumFetchInterval = 0 // 先赋值配置再加载本地默认值 RemoteConfig.remoteConfig().configSettings = settings RemoteConfig.remoteConfig().setDefaults(fromPlist: remoteConfigDefaults)
- 优化数组取值方法,兼容离线/在线两种场景
func arrayValue(forKey key: RemoteConfigKey) -> [String] { if localStorage.isRemoteConfigDebugEnabled, let localValue = localStorage.getRemoteConfigValue(forKey: key) as? String { return localValue.components(separatedBy: ",") } let configValue = value(forKey: key) // 优先取远端JSON数组 if let remoteArray = configValue.jsonValue as? [String] { return remoteArray } // 次优先取本地plist原生数组 if let localArray = configValue.arrayValue as? [String] { return localArray } // 兼容存储为逗号分隔字符串的数组配置 if let strValue = configValue.stringValue { return strValue.components(separatedBy: ",") } return [] }
- 补充字符串取值方法示例
func stringValue(forKey key: RemoteConfigKey) -> String { let configValue = value(forKey: key) return configValue.jsonValue as? String ?? configValue.stringValue ?? "" }
- 校验plist打包配置
确认plist文件已被加入到应用Target的Build Phases > Copy Bundle Resources列表中,避免打包时文件未被嵌入应用包导致读取失败。
内容的提问来源于stack exchange,提问作者Jkrist
相关产品推荐
相关产品推荐

