Skip to main content

通用概念

Shiply 各平台 SDK 共享的核心概念。接入任何平台前先理解这些概念,可避免跨平台混淆。

凭证与标识

概念含义获取方式各平台字段名
appId应用唯一标识Shiply Web 控制台 → 项目设置 → 应用信息iOS/Android appId;Harmony appId
appKey应用鉴权密钥同上appKey
guid / userId用户标识,用于按号码包/规则匹配灰度业务自定义(如 uin/openid)iOS guid;Android/Harmony userId
qimei / deviceId设备标识,用于上报与设备维度规则业务注入(隐私合规,SDK 不主动获取)iOS qimei;Android/Harmony deviceId

隐私合规:系统版本、设备型号、设备标识等隐私信息,SDK 不主动获取,需业务方注入。这是各平台的共同约定。

环境标识

概念含义各平台字段
envId环境数字 IDiOS envId(默认 RDeliveryReleaseEnvId 正式环境,另有 RDEnvironmentIotRelease = 3 IoT 发布环境)
logicEnvironment逻辑环境字符串Harmony logicEnvironment""=正式,"1"=测试,其他=自定义环境数字 ID)
environment资源 SDK 环境Windows ResHub environment(0=Release,1=Test,2=Pre(预发布))

iOS 配置用 envId;Harmony 用 logicEnvironment(字符串)。不要混用。资源 SDK 的 environment 与配置的 logicEnvironment 是两套字段,各自独立。

更新策略

配置 SDK 通过位掩码组合更新策略,资源 SDK 类似。

策略iOS 枚举Android 枚举说明
启动时更新RDCONFIG_UPDATE_MODE_APP_START (1<<0)START_UPApp 启动时拉取
定时更新RDCONFIG_UPDATE_MODE_SCHEDUAL (1<<1)PERIODIC按间隔定时拉取
切前台更新RDCONFIG_UPDATE_MODE_ENTER_FOREGROUND (1<<2)HOT_RELOAD(后台超阈值切前台)Android 称 HOT_RELOAD
网络恢复更新RDCONFIG_UPDATE_MODE_NETWORK_CHANGE (1<<3)NETWORK_RECONNECT从无网恢复联网时拉取
  • 默认间隔:定时更新默认 4 小时(iOS updateDuration=14400s;Android updateInterval 建议大于 1 小时)
  • 位掩码组合:iOS updateMode = APP_START | SCHEDUAL | NETWORK_CHANGE;Android updateStrategy 同理位运算

systemId(子系统区分)

systemId 区分同一 App 下不同子系统,避免配置数据混用:

systemId子系统说明
10001配置(RDelivery 默认)iOS/Android 默认值
10010资源(ResHub)资源 SDK 内部使用
10021热修复(Fix)热修复 SDK 内部使用
10016鸿蒙升级升级 SDK 内部硬编码
10013TAB 模式配置 SDK 可设

接入配置 SDK 通常无需显式设 systemId(用默认 10001)。接入资源/升级 SDK 时由 SDK 内部处理。

拉取目标(PullTarget / target)

C++ 配置层(RDeliveryConfig.target)与资源层(ResHubAppInfo.target)共享同一概念,决定拉取范围:

枚举值C++ RDPullTarget含义
项目级 (0)RDPullTargetProject只拉取当前项目下的配置/资源(默认值)
App 级 (1)RDPullTargetApp拉取整个 App 维度的配置/资源
全部 (2)RDPullTargetBoth项目级 + App 级都拉取
  • iOS 对应 RDConfigServerPullTarget(Project/App/AppAndProject)
  • 资源 SDK 的 ResHubTarget 与此同构,由 reshub_rdelivery_creater 映射
  • 大多数场景用默认 Project 即可;需要跨项目共享配置时切 App/Both

依赖注入模式

所有平台 SDK 都支持关键组件依赖注入,并提供默认实现。这是 Shiply SDK 的核心设计:

组件作用默认实现
网络HTTP 请求iOS RDNetworkImpl(NSURLSession);Android HttpsURLConnectionNetwork;C++ INetwork
存储KV 缓存iOS RDMMKVFactoryImpl(MMKV);Android MmkvStorageFactory;C++ RAFTKVStorageProtocol
日志SDK 日志输出iOS RDLoggerImpl(NSLog);Android SystemLog;C++ ILog
JSON模型转换iOS RDeliveryJsonModelImpl(YYModel)
RSA/AES加解密C++ IRSA/IAES(默认实现由平台注入)

C++ 层提供 IRSA / IAES 接口用于加解密注入,各平台在初始化时注入对应实现。

强烈建议注入业务日志实现:默认日志实现(NSLog/SystemLog)线上不可用,应注入业务日志组件,将 SDK 日志输出到业务日志系统,便于线上排查。这是各平台共同的最佳实践。

何时需要自定义注入

  • 接入方使用修改版 MMKV/YYModel 产生依赖冲突
  • 需要自定义网络层(如走业务统一网络通道、加代理)
  • 全局已初始化 MMKV,不希望 SDK 重复初始化

资源加载策略(资源 SDK 通用)

ResHub 的资源加载有三套语义,跨平台一致:

语义方法前缀行为
锁定版本(Lock)resWithId / loadWithId进程内多次调用返回同一版本,适合需体验一致的场景
最新版本(Latest)latestResWithId / loadLatestWithId返回本地配置中最新的资源,多次调用可能不同版本
实时最新(Realtime Latest)loadRealtimeLatestWithId强制实时请求配置再取最新包,频繁调用成本高,仅对实时性要求极高的资源用
  • res/get 系:同步读本地,不发网络请求
  • load 系:异步,可能触发网络拉取
  • loadLatest 返回的是"本地配置中的最新",与平台最新可能有延迟;要实时最新用 loadRealtimeLatest

自定义属性(custom_properties)

custom_propertiesRequestFullRemoteData 调用的关键参数,用于按自定义属性匹配灰度规则:

  • 业务方在拉取全量数据时传入 custom_properties(键值对),服务端根据属性值匹配对应的灰度规则,下发不同的配置/资源
  • 典型属性:用户等级(vip_level)、地域(region)、AB 实验分组等
  • 不传等价于不参与自定义属性匹配,仅按默认维度(userId/deviceId 等)匹配
  • 各平台实现:iOS RDeliverySDKSettings.customProperties;Android RDeliverySetting.customProperties;Harmony custom_properties

配置缺省值

配置读取时,远端不存在 key / 未拉到 / Web 未设置值时返回 defaultValue

  • defaultValue 参数:返回 defaultValue
  • 不带:返回对应空值(对象 nil、int 0 等)
这篇文档对您有帮助吗?