动态配置与动态更新地址¶
主动同步动态配置¶
使用方法¶
使用 FTMobileAgent 主动同步动态配置。在自动更新不满足需求时,通过主动调用方式调整更新时机。
FTMobileConfig.remoteConfiguration = YES时,调用主动同步动态配置方法才生效。
/// 主动更新远程远程配置,调用频次受 FTMobileConfig.remoteConfigMiniUpdateInterval 影响
+ (void)updateRemoteConfig;
/// 主动更新远程远程配置,这个方法无视 FTMobileConfig.remoteConfigMiniUpdateInterval 配置
/// - Parameters:
/// - miniUpdateInterval: 远程配置时间间隔,单位秒 [0,)
/// - completion: 请求完成后的回调,支持自定义调整配置回调中 Model
+ (void)updateRemoteConfigWithMiniUpdateInterval:(NSInteger)miniUpdateInterval
completion:(nullable FTRemoteConfigFetchCompletionBlock)completion;
/// 主动更新远程远程配置,调用频次受 FTMobileConfig.remoteConfigMiniUpdateInterval 影响
open class func updateRemoteConfig()
/// 主动更新远程远程配置,这个方法无视 FTMobileConfig.remoteConfigMiniUpdateInterval 配置
/// - Parameters:
/// - miniUpdateInterval: 远程配置时间间隔,单位秒 [0,)
/// - completion: 请求完成后的回调,请求完成后的回调,支持自定义调整配置回调中 Model
open class func updateRemoteConfig(withMiniUpdateInterval miniUpdateInterval: Int, completion: FTRemoteConfigFetchCompletionBlock? = nil)
远程配置拉取回调与自定义配置¶
SDK >= 1.5.19,支持通过
FTRemoteConfigFetchCompletionBlock返回值来自定义修改最终配置。
/**
* @brief 远程配置拉取完成回调 Block 类型
* @details 该 Block 用于接收远程配置的拉取/解析结果,同时返回 SDK 最终使用的配置模型,SDK 基于返回结果调整对应功能
*
* @param success 布尔值,是否拉取/解析成功
* - YES:操作成功,不保证配置数据非空
* - NO:操作失败(未开启功能/未到达最小时间间隔/网络异常/数据解析失败等)
* @param error 错误信息对象,仅当 success=NO 时返回有效错误详情,success=YES 时恒为 nil
* @param model 结构化配置模型,仅当 success=YES 且配置数据非空时返回有效实例,其余场景返回 nil
* @param content 原始配置字典,未进行结构化解析的原始数据,仅当 success=YES 且配置数据非空时返回有效字典,其余场景返回 nil
*
* @return FTRemoteConfigModel 可选实例,SDK 最终使用的配置模型
* - 成功场景(success=YES):
* 1. 返回非 nil 实例:SDK 采用该修改后的模型调整功能
* 2. 返回 nil:SDK 采用原始解析得到的 model(若存在)
* - 失败场景(success=NO):
* 必须返回 nil,SDK 忽略该回调结果
*/
typedef FTRemoteConfigModel*_Nullable(^FTRemoteConfigFetchCompletionBlock)(BOOL success,
NSError * _Nullable error,
FTRemoteConfigModel * _Nullable model,
NSDictionary<NSString *, id> * _Nullable content);
回调优先级:+updateRemoteConfigWithMiniUpdateInterval:completion:(主动方法专属回调) > FTMobileConfig.remoteConfigFetchCompletionBlock(全局统一回调)
使用示例
当前仅展示主动同步方法的回调示例,全局 remoteConfigFetchCompletionBlock 的使用逻辑与该示例一致。
[FTMobileAgent updateRemoteConfigWithMiniUpdateInterval:0 completion:^FTRemoteConfigModel * _Nullable(BOOL success, NSError * _Nullablererror, FTRemoteConfigModel * _Nullable model, NSDictionary<NSString *,id> * _Nullable content) {
if (error) {
NSLog(@"remoteConfigFetch error:%@",error.description);
}
// 操作成功时处理配置数据
if (success) {
// 获取远程配置的自定义环境变量值
// 示例:需要对指定的用户做调整,指定的用户为 uid = @"user_1"
NSString *userId = content[@"custom_userid"];
if ([userId isEqualToString:@"user_1"]) {
model.rumSampleRate = @(1);
model.logSampleRate = @(1);
model.traceSampleRate = @(1);
}
}
// 返回修改后的模型(未修改时返回 model 与返回 nil 等价,均使用原始模型)
return model;
}];
FTMobileAgent.updateRemoteConfig(withMiniUpdateInterval: 0) { (success: Bool, error: Error?, model: FTRemoteConfigModel?, content: [String: Any]?) -> FTRemoteConfigModel? in
if let error = errofr {
print("remoteConfigFetch error:\(error.localizedDescription)")
}
// 操作成功时处理配置数据
if success {
// 获取远程配置的自定义环境变量值
// 示例:需要对指定的用户做调整,指定的用户为 uid = @"user_1"
let userId = content?["custom_userid"] as? String
if userId == "user_1" {
model?.rumSampleRate = 1
model?.logSampleRate = 1
model?.traceSampleRate = 1
}
}
// 返回修改后的模型(未修改时返回 model 与返回 nil 等价,均使用原始模型)
return model
}
动态更新上报地址¶
使用 FTMobileAgent 在 SDK 运行时动态切换数据上报地址。设置成功后,后续数据会按新的地址继续上传。
SDK >= 1.5.21 支持
setDatakitURL与setDatawayURL:clientToken:。setDatakitURL与setDatawayURL:clientToken:二选一使用。 使用setDatawayURL:clientToken:时,需要同时传入新的clientToken。
使用场景说明¶
FTMobileConfig 支持初始化时不传入 datakitUrl 或 datawayUrl。在这种场景下,SDK 会先执行数据采集,但不会进行上传。
当后续调用 [FTMobileAgent setDatakitURL:] 或[FTMobileAgent setDatawayURL:clientToken:] 动态设置上报地址后,SDK 会开始消费本地缓存并执行数据上报。
需要注意的是,未设置上传地址期间,采集到的数据仍然会受到本地缓存上限限制。缓存上限主要受以下配置共同影响:
FTLoggerConfig.logCacheLimitCountFTRumConfig.rumCacheLimitCountFTMobileConfig.enableLimitWithDbSize对应的数据库缓存上限
如果缓存达到上限,超出部分的数据可能被丢弃,因此建议在该模式下尽快补充上传地址,或结合业务场景合理设置缓存限制。
| 方法名 | 类型 | 必须 | 含义 |
|---|---|---|---|
| setDatakitURL | NSString | 是 | 动态设置 Datakit 上报地址,设置成功后 SDK 会继续向新的 Datakit 地址上传数据。 |
| setDatawayURL:clientToken: | NSString, NSString | 是 | 动态设置 Dataway 上报地址和 clientToken,设置成功后 SDK 会继续向新的 Dataway 地址上传数据。 |