跳转至

动态配置与动态更新地址

主动同步动态配置

使用方法

使用 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 支持 setDatakitURLsetDatawayURL:clientToken:setDatakitURLsetDatawayURL:clientToken: 二选一使用。 使用 setDatawayURL:clientToken: 时,需要同时传入新的 clientToken

使用场景说明

FTMobileConfig 支持初始化时不传入 datakitUrldatawayUrl。在这种场景下,SDK 会先执行数据采集,但不会进行上传。

当后续调用 [FTMobileAgent setDatakitURL:][FTMobileAgent setDatawayURL:clientToken:] 动态设置上报地址后,SDK 会开始消费本地缓存并执行数据上报。

需要注意的是,未设置上传地址期间,采集到的数据仍然会受到本地缓存上限限制。缓存上限主要受以下配置共同影响:

  • FTLoggerConfig.logCacheLimitCount
  • FTRumConfig.rumCacheLimitCount
  • FTMobileConfig.enableLimitWithDbSize 对应的数据库缓存上限

如果缓存达到上限,超出部分的数据可能被丢弃,因此建议在该模式下尽快补充上传地址,或结合业务场景合理设置缓存限制。

[FTMobileAgent setDatakitURL:@"http://10.0.0.1:9529"];
[FTMobileAgent setDatawayURL:@"https://openway.guance.com" clientToken:@"your-client-token"];
FTMobileAgent.setDatakitURL("http://10.0.0.1:9529")
FTMobileAgent.setDatawayURL("https://openway.guance.com", clientToken: "your-client-token")
方法名 类型 必须 含义
setDatakitURL NSString 动态设置 Datakit 上报地址,设置成功后 SDK 会继续向新的 Datakit 地址上传数据。
setDatawayURL:clientToken: NSString, NSString 动态设置 Dataway 上报地址和 clientToken,设置成功后 SDK 会继续向新的 Dataway 地址上传数据。

文档评价

文档内容是否对您有帮助? ×