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 { <<enum>> + successFetchedFromRemote + successUsingPreFetchedData + error } ABCenterConfig o-- RemoteConfig : uses ABCenterConfig ..> RemoteConfigFetchAndActivateStatus : returns status

仓库地址

GitHub

相关推荐
张龙68714 分钟前
构建生产级 AI Agent:工具调用与记忆架构实战指南
前端
kyriewen1 小时前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
青山Coding3 小时前
Cesium应用(八):物体运动的实现思路
前端·cesium
用户41659673693553 小时前
Android WebView 加载 file:// 离线页面调试教程
android·前端
Asmewill3 小时前
curl命令学习笔记一
前端
我是一只快乐的小螃蟹3 小时前
1.2 ArrayList 源码解析
前端
星栈3 小时前
我用 Rust + Dioxus 做了个全栈跨平台笔记应用:再把新建、编辑和交付补上
前端·rust·前端框架
我是一只快乐的小螃蟹3 小时前
1.1 HashMap (JDK1.8) 源码解析
前端
爱勇宝6 小时前
小红花成长新版:模板来了,鼓励也更容易开始
前端·后端·程序员
竹林8186 小时前
Solana前端开发:我在一个NFT铸造页面上被@solana/web3.js的Connection和Transaction签名坑了两天
前端