ABCenterConfig AB开关配置组件

概述

ABCenterConfig 是基于 Firebase Remote Config 的封装类,提供了远程配置的初始化、拉取激活及多类型读取接口,方便在 iOS 项目中统一管理远程参数。


主要组成

1. 枚举类型 RemoteConfigFetchAndActivateStatus

定义远程配置拉取与激活的状态:

状态 说明
successFetchedFromRemote 成功从远程获取并激活配置
successUsingPreFetchedData 使用预先拉取的本地缓存配置
error 拉取或激活过程中发生错误

2. 类 ABCenterConfig

单例实例

  • shared:全局单例访问点。

属性

  • remoteConfig:Firebase Remote Config 实例。

初始化

  • 私有构造函数 init(),调用 setUpConfig() 初始化 Remote Config。

公开方法

方法名 功能描述
setup() 公开初始化接口,预留额外初始化操作
fetchAndActivate(completionHandler:) 异步拉取并激活远程配置,带状态及错误回调
string(forKey:) 获取字符串类型的配置值
number(forKey:) 获取数字类型的配置值
data(forKey:) 获取 Data 类型的配置值
bool(forKey:) 获取布尔类型的配置值
jsonValue(forKey:) 获取 JSON 类型的配置值

私有方法

  • setUpConfig():配置 Remote Config 实例,设置最小拉取间隔及默认值。

使用示例

1. Pod 导入

arduino 复制代码
pod 'ABCenterConfig'

2. 代码示例

go 复制代码
import ABCenterConfig
​
// 获取单例
let config = ABCenterConfig.shared
​
// 初始化(可选)
config.setup()
​
// 拉取并激活远程配置
config.fetchAndActivate { status, error in
    switch status {
    case .successFetchedFromRemote:
        print("配置成功从远程拉取")
    case .successUsingPreFetchedData:
        print("使用预先拉取的本地配置")
    case .error:
        print("拉取配置出错:(error?.localizedDescription ?? "未知错误")")
    }
}
​
// 读取配置
let welcomeText = config.string(forKey: "welcome_message") ?? "默认欢迎语"
let maxCount = config.number(forKey: "max_count")?.intValue ?? 0
let isFeatureEnabled = config.bool(forKey: "feature_enabled")

结构流程图

classDiagram class ABCenterConfig { - RemoteConfig? remoteConfig + static shared: ABCenterConfig - init() + setup() - setUpConfig() + fetchAndActivate(completionHandler) + string(forKey) + number(forKey) + data(forKey) + bool(forKey) + jsonValue(forKey) } class RemoteConfigFetchAndActivateStatus { <> + successFetchedFromRemote + successUsingPreFetchedData + error } ABCenterConfig o-- RemoteConfig : uses ABCenterConfig ..> RemoteConfigFetchAndActivateStatus : returns status

仓库地址

GitHub

相关推荐
康一夏38 分钟前
React面试题,封装useEffect
前端·javascript·react.js
Full Stack Developme1 小时前
Redis 持久化 备份 还原
前端·chrome
猪猪拆迁队1 小时前
2025年终总结-都在喊前端已死,这一年我的焦虑、挣扎与重组:AI 时代如何摆正自己的位置
前端·后端·ai编程
❆VE❆1 小时前
WebSocket与SSE深度对比:技术差异、场景选型及一些疑惑
前端·javascript·网络·websocket·网络协议·sse
ConardLi1 小时前
SFT、RAG 调优效率翻倍!垂直领域大模型评估实战指南
前端·javascript·后端
rgeshfgreh1 小时前
Java高性能开发:Redis7持久化实战
前端·bootstrap·mybatis
李剑一2 小时前
uni-app使用html5+创建webview,可以控制窗口大小、显隐、与uni通信
前端·trae
Hooray2 小时前
2026年,站在职业生涯十字路口的我该何去何从?
前端·后端
小二·2 小时前
Python Web 开发进阶实战:安全加固实战 —— 基于 OWASP Top 10 的全栈防御体系
前端·python·安全
over6972 小时前
🌟 JavaScript 数组终极指南:从零基础到工程级实战
前端·javascript·前端框架