コンテンツにスキップ

SDK 初期化

本稿では、iOS/tvOS/macOS SDK の初期化と実行時機能に関する内容を説明します。

基本設定

iOS/tvOS では通常、AppDelegate で初期化します。macOS では、最初に表示される NSViewController の viewDidLoad メソッドや NSWindowController の windowDidLoad メソッドの呼び出しが、AppDelegate の applicationDidFinishLaunching より先に行われます。最初のビューのライフサイクル収集時の異常を避けるため、main.m または main.swift で SDK を初期化することを推奨します。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    // SDK FTSDKConfig の設定
     // ローカル環境デプロイ、Datakit デプロイ
     //FTSDKConfig *config = [[FTSDKConfig alloc]initWithDatakitUrl:datakitUrl];
     // パブリック DataWay デプロイを使用
    FTSDKConfig *config = [[FTSDKConfig alloc]initWithDatawayUrl:datawayUrl clientToken:clientToken];
    //config.enableSDKDebugLog = YES;              //debug モード
    config.compressIntakeRequests = YES;
    //SDK を起動
    [FTMobileAgent startWithConfigOptions:config];

   //...
    return YES;
}
// main.m ファイル
#import <Cocoa/Cocoa.h>
#import <GuanceSDK/GuanceSDK.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // ローカル環境デプロイ、Datakit デプロイ
        FTSDKConfig *config = [[FTSDKConfig alloc] initWithDatakitUrl:datakitUrl];
        // パブリック DataWay デプロイを使用
        // FTSDKConfig *config = [[FTSDKConfig alloc] initWithDatawayUrl:datawayUrl clientToken:clientToken];
        config.enableSDKDebugLog = YES;
        [FTSDKAgent startWithConfigOptions:config];
    }
    return NSApplicationMain(argc, argv);
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
     // SDK FTSDKConfig の設定
       // ローカル環境デプロイ、Datakit デプロイ
       //let config = FTSDKConfig(datakitUrl: url)
       // パブリック DataWay デプロイを使用
     let config = FTSDKConfig(datawayUrl: datawayUrl, clientToken: clientToken)
     //config.enableSDKDebugLog = true              //debug モード
     config.compressIntakeRequests = true           //送信データを圧縮
     FTMobileAgent.start(withConfigOptions: config)
     //...
     return true
}

main.swift ファイルを作成し、AppDelegate.swift 内の @main または @NSApplicationMain を削除します。

import Cocoa
import GuanceSDK
let delegate = AppDelegate()
NSApplication.shared.delegate = delegate

let config = FTSDKConfig(datakitUrl: datakitUrl)
// パブリック DataWay デプロイを使用
// let config = FTSDKConfig(datawayUrl: datawayUrl, clientToken: clientToken)
config.enableSDKDebugLog = true
FTSDKAgent.start(withConfigOptions: config)

_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
初期化設定の命名

SDK 1.6.6 以降では、新しいコードでは FTSDKConfig の使用を推奨します。FTMobileConfig は現在も互換性のある形で使用でき、FTSDKConfig を継承しています。1.6.6 未満のバージョンでは、引き続き FTMobileConfig を使用してください。

プロパティ 型 必須 説明
datakitUrl NSString 必須 ローカル環境デプロイ(Datakit)のデータ送信 URL アドレス。例:http://10.0.0.1:9529。ポートはデフォルトで 9529 です。SDK をインストールしたデバイスがこのアドレスにアクセスできる必要があります。注意:datakitUrl と datawayUrl はどちらか一方のみ設定してください
datawayUrl NSString 必須 パブリック DataWay のデータ送信 URL アドレス。[RUM] アプリから取得します。例:https://open.dataway.url。SDK をインストールしたデバイスがこのアドレスにアクセスできる必要があります。注意:datakitUrl と datawayUrl はどちらか一方のみ設定してください
clientToken NSString 必須 認証トークン。datawayUrl と同時に使用する必要があります
enableSDKDebugLog BOOL 任意 ログ出力を許可するかどうかを設定します。デフォルトは NO
env NSString 任意 収集環境を設定します。デフォルトは prod。カスタム設定に対応しており、提供されている FTEnv 列挙型を使用して -setEnvWithType: メソッドで設定することもできます
service NSString 任意 所属するビジネスまたはサービスの名前を設定します。Log と RUM の service フィールドデータに影響します。デフォルトは、iOS が df_rum_ios、tvOS が df_rum_tvos、macOS が df_rum_macos です
globalContext NSDictionary 任意 カスタムタグを追加します。追加ルールは こちら を参照してください
groupIdentifiers NSArray 任意 収集対象の iOS Widget Extensions に対応する AppGroups Identifier の配列。Widget Extensions のデータ収集を有効にする場合は、App Groups を設定し、Identifier をこのプロパティに設定する必要があります。macOS は Widget Extension をサポートしていません
autoSync BOOL 任意 データ収集後にサーバーへ自動同期するかどうか。デフォルトは YES。NO の場合、iOS/tvOS では [[FTMobileAgent sharedInstance] flushSyncData]、macOS では [[FTSDKAgent sharedInstance] flushSyncData] を使用してデータ同期を管理します
syncPageSize int 任意 同期リクエストの件数を設定します。範囲は [5,)。注意:リクエスト件数が大きいほど、データ同期がより多くの計算リソースを消費します。デフォルトは 10
syncSleepTime int 任意 同期の間隔時間を設定します。範囲は [0,5000]、デフォルトでは未設定
enableDataIntegerCompatible BOOL 任意 web データと共存する必要がある場合は、有効にすることを推奨します。この設定は、web データ型の保存互換性の問題を処理するために使用されます
compressIntakeRequests BOOL 任意 アップロードする同期データを deflate 圧縮します。SDK 1.5.6 以降でこのパラメータをサポートしています。デフォルトは無効
enableLimitWithDbSize BOOL 任意 DB を使用して総キャッシュサイズを制限する機能を有効にします。注意:有効にすると、FTLoggerConfig.logCacheLimitCount および FTRUMConfig.rumCacheLimitCount は無効になります。SDK 1.5.8 以降でこのパラメータをサポートしています
dbCacheLimit long 任意 DB キャッシュの制限サイズ。範囲は [30MB,)、デフォルトは 100MB、単位は byte。SDK 1.5.8 以降でこのパラメータをサポートしています
dbDiscardType FTDBCacheDiscard 任意 データベース内のデータ破棄ルールを設定します。デフォルトは FTDBDiscard。FTDBDiscard は、データ数が最大値を超えた場合に追加データを破棄します。FTDBDiscardOldest は、データが最大値を超えた場合に古いデータを破棄します。SDK 1.5.8 以降でこのパラメータをサポートしています
dataModifier FTDataModifier 任意 単一フィールドを変更します。SDK 1.5.16 以降でサポート。使用例は データ収集のマスキング を参照してください
lineDataModifier FTLineDataModifier 任意 単一データ行を変更します。SDK 1.5.16 以降でサポート。使用例は データ収集のマスキング を参照してください
enableDataFilter BOOL 任意 SDK 側のブラックリストフィルタを有効にするかどうか。デフォルトは YES。Log と RUM データのフィルタをサポートしています。SDK 1.6.4 以降でサポート。使用例は ブラックリストフィルタ を参照してください
dataFilters NSDictionary 任意 アプリ内のブラックリストルールを設定します。logging と rum の 2 種類のデータをサポートしています。SDK 1.6.4 以降でサポート。ルール構文は ブラックリストルール を参照してください
remoteConfiguration BOOL 任意 データ収集のリモート設定機能を有効にするかどうか。デフォルトでは無効。有効にすると、SDK の初期化またはアプリのホットスタート時にデータ更新がトリガーされます。SDK 1.5.17 以降でサポート。Datakit のバージョンは >=1.60 であるか、パブリック DataWay を使用している必要があります
remoteConfigMiniUpdateInterval int 任意 リモート動的設定の最小更新間隔を設定します。単位は秒、デフォルトは 12 時間です。SDK 1.5.17 以降でサポート
remoteConfigFetchCompletionBlock FTRemoteConfigFetchCompletionBlock 任意 リモート設定結果のコールバック。取得結果を受け取り、設定モデルをカスタマイズして調整できます。SDK 1.5.19 以降でサポート。使用例は こちら を参照してください

ブラックリストフィルタ

SDK 1.6.4 以降では、データがローカルキャッシュに書き込まれる前に RUM と Log データをフィルタできます。この機能はデフォルトで有効になっており、FTSDKConfig.enableDataFilter = NO を設定することで SDK 側のフィルタを無効にできます。

ブラックリストルールは、Guance ワークスペースのブラックリストで一括設定でき、SDK が DataKit または DataWay から自動的に取得します。また、FTSDKConfig.dataFilters を使用してアプリ内で設定することもできます。2 つの方法は同じブラックリストフィルタ機能に対応しており、併用できます。いずれかのルールに一致した場合、そのデータは破棄されます。

ブラックリストフィルタは、lineDataModifier の後、ローカルキャッシュへの書き込み前に実行されます。lineDataModifier とブラックリストフィルタの両方を設定している場合、フィルタルールは変更後のデータに基づいて判定されます。

enableDataFilter は SDK 側のルール取得とフィルタのみを制御します。NO に設定すると、SDK は dataFilters を適用したり、ワークスペースのルールを取得したりしなくなります。DataKit を使用してデータを送信する場合、ワークスペースのブラックリストが DataKit 側で実行される場合があります。

Data Filter は SDK のデータ書き込みパイプラインに作用します。ルールが多すぎる場合や正規表現が複雑すぎる場合は、データ書き込みのパフォーマンスに影響する可能性があります。必要なルールのみを設定することを推奨します。

config.enableDataFilter = YES;
config.dataFilters = @{
    @"logging": @[@"{ source in [ 'df_rum_ios_log' ] and message match [ 'timeout' ] }"],
    @"rum": @[@"{ resource_status match [ '5..' ] }"]
};
config.enableDataFilter = true
config.dataFilters = [
    "logging": ["{ source in [ 'df_rum_ios_log' ] and message match [ 'timeout' ] }"],
    "rum": ["{ resource_status match [ '5..' ] }"]
]

SDK は初期化時にワークスペースのブラックリストルールを即座に取得します。以降の取得間隔は、サーバーが返す pull_interval に従います。サーバーが有効な値を返さない場合、SDK は 10 秒をフォールバック間隔として使用します。pull_interval は秒数または単位付きの文字列(例:10、30s、2m、1h)をサポートします。

ルール構文

Data Filter のルール構文はブラックリストフィルタのルールと基本的に同じです。完全な構文の説明は ブラックリストフィルタのルール を参照してください。

dataFilters の key はデータ分類を表します。現在 SDK がサポートしている分類は次のとおりです:

分類 説明
logging Log データ
rum RUM データ

各ルールは { 条件 } で表され、いずれかのルールに一致すると、その分類のデータがフィルタされます。ルールでは、データの tag、field フィールド、および source、measurement のデータ型識別フィールドを使用できます。

フィールド値の形式とオペレータの意味については、ブラックリストフィルタのルールの フィールド値の形式説明 と オペレータ説明 を参照してください。

SDK のルール文字列では、フィールド値は配列形式を使用することを推奨します。否定オペレータは not in、not match をサポートし、サーバーから配信されるルールで使用される notin、notmatch、not_in とも互換性があります。

{ status in [ 'debug' ] and env not in [ 'prod' ] and message not match [ '.*error.*' ] }

ユーザーのバインドとログアウト

FTMobileAgent を使用してユーザー情報をバインドし、現在のユーザーをログアウトします。

/// ユーザー情報をバインドします。ユーザーのログイン成功後にこのメソッドを呼び出してユーザー情報をバインドできます。
///
/// - Parameters:
///   - Id:  ユーザーId
///   - userName: ユーザー名(オプション)
///   - userEmail: ユーザーのメールアドレス(オプション)
///   - extra: ユーザーの追加情報(オプション)
- (void)bindUserWithUserID:(NSString *)Id userName:(nullable NSString *)userName userEmail:(nullable NSString *)userEmail extra:(nullable NSDictionary *)extra;

/// 現在のユーザーをログアウトします。ユーザーのログアウト後にこのメソッドを呼び出してユーザー情報のバインドを解除できます。
- (void)unbindUser;
/// ユーザー情報をバインドします。ユーザーのログイン成功後にこのメソッドを呼び出してユーザー情報をバインドできます。
///
/// - Parameters:
///   - Id:  ユーザーId
///   - userName: ユーザー名(オプション)
///   - userEmail: ユーザーのメールアドレス(オプション)
///   - extra: ユーザーの追加情報(オプション)
open func bindUser(withUserID Id: String, userName: String?, userEmail: String?, extra: [AnyHashable : Any]?)

/// 現在のユーザーをログアウトします。ユーザーのログアウト後にこのメソッドを呼び出してユーザー情報のバインドを解除できます。
open func unbindUser()

extra の追加ルールに関する注意事項は こちら を参照してください。

実行時機能

SDK のシャットダウン

FTMobileAgent を使用して SDK をシャットダウンする場合は、必ずメインスレッドで呼び出してください。呼び出さないと、スレッドセーフティの問題が発生する可能性があります。SDK の設定を動的に変更する場合は、誤ったデータの発生を避けるため、先にシャットダウンする必要があります。

+ (void)shutDown;
open class func shutDown()

SDK キャッシュデータのクリア

FTMobileAgent を使用して、未送信のキャッシュデータをクリアします。

+ (void)clearAllData;
open class func clearAllData()

データの手動同期

FTMobileAgent を使用してデータを手動同期します。

FTSDKConfig.autoSync = NO の場合のみ、データ同期を手動で行う必要があります。旧バージョンの FTMobileConfig.autoSync も引き続き互換性があります。

- (void)flushSyncData;
func flushSyncData()

動的設定の手動同期

動的設定に関する機能は 動的設定 に分割されています。

フィードバック

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