コンテンツにスキップ

動的構成と動的更新アドレス

アクティブ同期による動的構成

使用方法

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 は初期化時に datakitUrl または datawayUrl を渡さないことをサポートしています。このシナリオでは、SDK はデータ収集を実行しますが、アップロードは行いません。

その後、[FTMobileAgent setDatakitURL:] または [FTMobileAgent setDatawayURL:clientToken:] を呼び出して動的に送信先アドレスを設定すると、SDK はローカルキャッシュを消費し、データのアップロードを開始します。

なお、送信先アドレスが設定されていない間も、収集されたデータはローカルキャッシュの上限の影響を受けます。キャッシュの上限は主に以下の設定によって決まります。

  • FTLoggerConfig.logCacheLimitCount
  • FTRumConfig.rumCacheLimitCount
  • FTMobileConfig.enableLimitWithDbSize に対応するデータベースキャッシュ上限

キャッシュが上限に達すると、超過分のデータは破棄される可能性があるため、このモードではできるだけ早く送信先アドレスを補完するか、ビジネスシナリオに応じてキャッシュ制限を適切に設定することをお勧めします。

[FTMobileAgent setDatakitURL:@"http://10.0.0.1:9529"];
[FTMobileAgent setDatawayURL:@"https://open.dataway.url" clientToken:@"your-client-token"];
FTMobileAgent.setDatakitURL("http://10.0.0.1:9529")
FTMobileAgent.setDatawayURL("https://open.dataway.url", clientToken: "your-client-token")
メソッド名 必須 説明
setDatakitURL NSString はい Datakit の送信先アドレスを動的に設定します。設定が成功すると、SDK は新しい Datakit アドレスにデータをアップロードし続けます。
setDatawayURL:clientToken: NSString, NSString はい Dataway の送信先アドレスと clientToken を動的に設定します。設定が成功すると、SDK は新しい Dataway アドレスにデータをアップロードし続けます。

フィードバック

このページは役に立ちましたか?