Remote Config 概念篇
Remote Config 概念篇
Remote Config
Remote Config 是可以和任意 UOS 应用搭配使用的远程配置模块。支持开发者动态更改游戏配置,以减少不必要的打包发版次数。一些使用 Remote Config 的例子如下:
- A/B Testing 和新功能上线
- 可集成 CDN 进行灰度测试
- 提前设定好时间的节日推广/限时活动
- 白名单/黑名单,或根据玩家标签(Tag)提供差异化体验
配置 ( Config )
配置(Config)是面向游戏开发者的概念,是传统的Config形式,以 key-value 的形式存储在云端。
只有游戏开发者有权对 Config 进行管理,其中更改是实时生效的。操作在开发者控制面板或 Editor内进行。
对于同一 UOS App 来说,key 是不能重复的。
支持的配置类型有此6类:int、float、long、bool、string、json。
覆盖 ( Override )
覆盖(Override)也是面向游戏开发者(Developer)的概念,为了在Config之上进行更加灵活的特异性配置。包括应用百分比、生效开始时间、过期时间等。
只有游戏开发者可以对Override进行管理。操作在开发者控制面板进行。
内容包括:
名称(Name): Override的名称
描述(Description): Override的描述
启用(Enabled): Override是否启用
生效时间(StartDate): Override的生效时间,空值为立即生效
过期时间(EndDate): Override的过期时间,空值为永久有效
Expr(Condition): Override条件,可以根据游戏传入的值进行逻辑判断
- 默认通过为 true
- 针对三个类别的变量进行逻辑判断:unity, app, user
- Expr
- 例子:user.score >= 10 || (unity.language == 'EN' && app.version == '1.2')
注:对于单独的bool值,需要显式表达,例如 user.IsNewPlayer == true
玩家覆盖比例(RolloutPercentage): 应用百分比,是 0-100 的值,表示使用Override的用户所占的百分比
优先级(Priority): 1-1000的整数,其中1为最高优先级,1000为最低优先级,针对有多个覆盖(Override)作用于同一个配置(Config)的情况
变体(Variants): 这是Override值的组合以及对应的权重
- Variants 是一列 Variant,每个variant有名称(Name),权重(Weight)和内容(Content)。所有weight加起来必须是100
- 每个内容(Content)是一些被覆盖的配置(Config)的组合
- Variant的作用是让用户随机被分到多个不同组合
- 对于同一个用户(UserID),他被分配到的variant保持一致
- 下面的例子中,用户有30%的概率会被应用第一个变体,有70%的概率会被应用第二个变体
{
"variants":[
{
"name":"variant1",
"weight":30,
"content":[
{
"values":[
{
"key":"key1",
"type":"string",
"value":"value111"
}
]
}
]
},
{
"name":"variant2",
"weight":70,
"content":[
{
"values":[
{
"key":"key1",
"type":"string",
"value":"value222"
}
]
},
{
"values":[
{
"key":"key2",
"type":"int",
"value":"200"
}
]
}
]
}
]
}系统内计算Override的逻辑顺序
- 启用(Enabled)
- 生效时间(StartDate) + 过期时间(EndDate)
- Expr条件语句(Condition)
- 玩家覆盖比例(RolloutPercentage)
- 变体(Variants)
- 优先级(priority是为了冲突解决而存在的,详情请往下阅读)
关于Override Priority与冲突解决
我们通过一个例子来看Priority的使用方法。
首先假设有:
- Config:
{"key1":"value1A", "key2":"value2A"} - Override1:
{"key1":"value1B"} - Override2:
{"key1":"value1C", "key2":"value2C"}
| Override 1 启用/优先级 | Override 2 启用/优先级 | 结果返回 |
|---|---|---|
| 不启用 | 不启用 | {"key1":"value1A", "key2":"value2A"} |
| 启用 | 不启用 | {"key1":"value1B", "key2":"value2A"} |
| 不启用 | 启用 | {"key1":"value1C", "key2":"value2C"} |
| 启用,priority=1(优先级高) | 启用,priority=2(优先级低) | {"key1":"value1B", "key2":"value2C"} |
| 启用,priority=2(优先级低) | 启用,priority=1(优先级高) | {"key1":"value1C", "key2":"value2C"} |
玩家设定 ( Player Settings )
这是面向玩家客户端的概念,玩家通过传入 Keys 和自己的属性(包括 unity,app,user),从Remote Config后台系统里拿到属于自己的值,这些值就是玩家的 Player Settings。