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 のデータ書き込みパイプラインに作用します。ルールが多すぎる場合や正規表現が複雑すぎる場合は、データ書き込みのパフォーマンスに影響する可能性があります。必要なルールのみを設定することを推奨します。
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 とも互換性があります。
ユーザーのバインドとログアウト¶
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 の設定を動的に変更する場合は、誤ったデータの発生を避けるため、先にシャットダウンする必要があります。
SDK キャッシュデータのクリア¶
FTMobileAgent を使用して、未送信のキャッシュデータをクリアします。
データの手動同期¶
FTMobileAgent を使用してデータを手動同期します。
FTSDKConfig.autoSync = NOの場合のみ、データ同期を手動で行う必要があります。旧バージョンのFTMobileConfig.autoSyncも引き続き互換性があります。
動的設定の手動同期¶
動的設定に関する機能は 動的設定 に分割されています。