コンテンツにスキップ

SDK 初期化

このドキュメントでは、HarmonyOS SDK の初期化と実行時機能について説明します。

基本設定

EntryAbility.ets で SDK を初期化します:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { FTSDK, FTSDKConfig, EnvType, SDKLogLevel, SyncPageSize} from '@guancecloud/ft_sdk/Index';

const DOMAIN = 0x0000;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.initFTSDK();
  }

  private initFTSDK(): void {
    try {
      // ローカル環境へのデプロイ(DataKit)
      // const sdkConfig = FTSDKConfig.builder(datakitUrl);

      // パブリックネットワーク DataWay
      const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
        .setDebug(true)
        .setSdkLogLevel(SDKLogLevel.D)
        .setServiceName('Your-App-Name')
        .setEnv(EnvType.PROD) // または文字列を使用:.setEnv('prod')
        .addGlobalContext('app_channel', new String('appgallery'))
        .setAutoSync(true)
        .setSyncPageSize(SyncPageSize.MEDIUM)
        .setDataSyncRetryCount(5)
        .setSyncSleepTime(0)
        .setCompressIntakeRequests(true);

      FTSDK.install(sdkConfig, this.context);
      hilog.info(DOMAIN, 'FTSDK', 'FT SDK initialized successfully');
    } catch (error) {
      const errorObj: object = error as object;
      hilog.error(DOMAIN, 'FTSDK', `Failed to initialize FT SDK: ${JSON.stringify(errorObj)}`);
    }
  }
}
メソッド名 型 必須 説明
datakitUrl string はい ローカル環境(DataKit)のデータ送信 URL アドレス。例:http://10.0.0.1:9529。ポート番号はデフォルトで 9529 です。SDK をインストールしたデバイスからこのアドレスにアクセスできる必要があります。注意:datakitUrl と datawayUrl はどちらか一方のみ設定してください
datawayUrl string はい パブリックネットワーク DataWay のデータ送信 URL アドレス。[リアルユーザーモニタリング(RUM)]アプリから取得します。例:https://open.dataway.url。SDK をインストールしたデバイスからこのアドレスにアクセスできる必要があります。注意:datakitUrl と datawayUrl はどちらか一方のみ設定してください
clientToken string はい 認証トークン。datawayUrl と同時に設定する必要があります
setDebug boolean いいえ SDK 内部の診断ログを有効にするかどうか。デフォルトは false
setSdkLogLevel SDKLogLevel いいえ SDK 内部ログの出力レベルを設定します。詳細は トラブルシューティング を参照してください
setEnableInnerLogFile enable: boolean, config?: FTInnerLogFileConfig いいえ SDK 内部ログをローカルファイルに書き込むかどうか。デフォルトは false。詳細は トラブルシューティング を参照してください
setEnv string \| EnvType いいえ 環境。デフォルトは prod。EnvType 列挙型または文字列を指定できます
setServiceName string いいえ 所属するビジネスまたはサービス名。デフォルトは df_rum_harmonyos
addGlobalContext key: string, value: object いいえ SDK のグローバル属性を追加します。追加ルールはこちらを参照してください
setAutoSync boolean いいえ データ収集後にサーバーへ自動同期するかどうか。デフォルトは true。false に設定した場合、FTSDK.flushSyncData() を使用してデータ同期を管理できます
setSyncPageSize SyncPageSize いいえ 定義済みの同期リクエスト件数を設定します。MINI は 5 件、MEDIUM は 10 件、LARGE は 50 件。デフォルトは SyncPageSize.MEDIUM
setCustomSyncPageSize number いいえ 同期リクエスト件数をカスタマイズします。範囲は [5, 500]、小数は切り捨て、デフォルトは 10。setSyncPageSize とはどちらか一方のみ設定します
setDataSyncRetryCount number いいえ 1回のデータ同期における最大再試行回数を設定します。範囲は [0, 5]、小数は切り捨て、デフォルトは 5
setSyncSleepTime number いいえ 連続する同期リクエスト間の待機時間を設定します。範囲は [0, 5000]、単位はミリ秒、デフォルトは 0
setCompressIntakeRequests boolean いいえ アップロードデータに zlib ラップの deflate 圧縮を使用するかどうか。デフォルトは true。圧縮が利用できない場合は平文でアップロードされます
setProxy FTProxyConfig \| null いいえ SDK のデータアップロードリクエストで使用する HTTP プロキシを設定します。null を渡すとプロキシ設定をクリアできます
setProxyAuthenticator FTProxyAuthenticator \| null いいえ アップロードプロキシの認証情報を設定します。null を渡すと個別の認証設定をクリアできます
setDns FTDnsConfig \| null いいえ SDK のデータアップロードリクエストで使用する DNS サーバーまたは DNS over HTTPS アドレスを設定します。null を渡すと DNS 設定をクリアできます
setDataModifier DataModifier \| null いいえ 単一のフィールドを変更またはマスキングします。null を返すと元の値が保持されます。詳細はデータ収集のマスキングを参照してください
setLineDataModifier LineDataModifier \| null いいえ 単一データの既存フィールドを一括で変更またはマスキングします。詳細はデータ収集のマスキングを参照してください
setEnableDataFilter boolean いいえ DataKit 互換のローカルおよびリモートブラックリストフィルタリング機能を有効にするかどうか。デフォルトは true。Logging および RUM データのフィルタリングに対応しています。詳細はブラックリストフィルタリングを参照してください
setDataFilters FTDataFilters \| null いいえ ローカルのブラックリストフィルタリングルールを設定します。logging、rum の2種類のルールに対応しています。null を渡すとローカルルールをクリアできます。詳細はブラックリストフィルタリングを参照してください
setEnableAccessDeviceID boolean いいえ システムのデバイス識別子を device_uuid として使用するかどうか。デフォルトは false。オフの場合、SDK で永続化されたプライバシー UUID を使用します
setRemoteConfiguration boolean いいえ データ収集のリモート設定機能を有効にするかどうか。デフォルトは false。有効にすると、SDK は RUM 設定のインストールが完了し、有効なデータ送信アドレスがある場合に設定を取得します
setRemoteConfigMiniUpdateInterval number いいえ データ更新の最小間隔を設定します。単位は秒、デフォルトは 12 時間
setRemoteConfigurationCallBack FTRemoteConfigFetchResult \| null いいえ リモート設定結果のコールバック。コード例を参照してください
setNeedTransformOldCache boolean いいえ 旧キャッシュデータを移行するかどうか。デフォルトは false。初めて FileStore に切り替える際、既存の SQLite キャッシュを保持する必要がある場合に有効にします。ft-sdk 0.1.17 以降でサポートされています。
enableFileDataStore Void いいえ ファイルキャッシュを有効にし、同期キャッシュと RUM 集計データに使用します。デフォルトでは引き続き SQLite キャッシュを使用します。ft-sdk 0.1.17 以降でサポートされています。
setUseFileDataStore boolean いいえ ファイルキャッシュを使用するかどうかを設定します。true を渡すと FileStore を使用し、false を渡すとデフォルトの SQLite キャッシュを使用します。ft-sdk 0.1.17 以降でサポートされています。
setFileDataStoreShadow boolean いいえ ファイルキャッシュのシャドウ書き込みを有効にします。有効にすると、読み取りとアップロードは引き続き SQLite を使用し、書き込みは FileStore にミラーリングされます。移行前の検証に使用します。ft-sdk 0.1.17 以降でサポートされています。
enableLimitWithCacheSize cacheSize?: number いいえ 総キャッシュサイズ制限を有効にします。デフォルトは 100MB、単位は Byte。指定できる最小値は 30MB。有効にすると、Log と RUM の件数制限は無効になります。ft-sdk 0.1.17 以降でサポートされています。
setCacheDiscard CacheDiscard いいえ キャッシュがサイズ上限に達した後の破棄ポリシーを設定します。デフォルトは CacheDiscard.DISCARD。DISCARD は新規データを破棄し、DISCARD_OLDEST は最も古いキャッシュデータを削除します。ft-sdk 0.1.17 以降でサポートされています。
enableLimitWithDbSize cacheSize?: number いいえ 非推奨です。旧バージョンとの互換性のために残されています。enableLimitWithCacheSize の使用を推奨します。
setDbCacheDiscard DBCacheDiscard いいえ 非推奨です。旧バージョンとの互換性のために残されています。setCacheDiscard の使用を推奨します。

動的設定と実行時のデータ送信アドレス更新の使用方法については、動的設定と動的アドレス更新を参照してください。

ファイルキャッシュ

ft-sdk 0.1.17 以降では、同期キャッシュと RUM 集計データをファイルキャッシュに書き込むことができます。スムーズなアップグレードのため、SDK はデフォルトで SQLite キャッシュを使用します。ファイルキャッシュを有効にする場合は、FTSDKConfig で明示的に設定してください。

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .enableFileDataStore();

ファイルキャッシュの書き込みを事前に検証する場合は、シャドウ書き込みを有効にできます。有効にすると、SDK は引き続き SQLite からデータを読み取ってアップロードし、書き込みは FileStore にミラーリングされます。検証が完了したら enableFileDataStore() に切り替えます。

const shadowConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setFileDataStoreShadow(true);

キャッシュサイズ制限

ft-sdk 0.1.17 以降では、enableLimitWithCacheSize を使用して SDK の総キャッシュサイズ制限を設定することを推奨します。有効にすると、個別のログ件数上限 FTLoggerConfig.setLogCacheLimitCount と RUM 件数上限 FTRUMConfig.setRumCacheLimitCount は無効になります。

import { CacheDiscard, FTSDKConfig } from '@guancecloud/ft_sdk/Index';

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  // 総キャッシュサイズ制限を有効にします。例では 100MB。
  .enableLimitWithCacheSize(100 * 1024 * 1024)
  // キャッシュが上限に達した場合、最も古いキャッシュデータを削除します。
  .setCacheDiscard(CacheDiscard.DISCARD_OLDEST);

アップロードネットワーク設定

setProxy(...)、setProxyAuthenticator(...)、setDns(...) は、SDK が DataKit または DataWay へデータをアップロードするリクエストにのみ作用します。アプリのビジネスリクエストのネットワーク設定は変更されません。

import {
  FTSDK,
  FTSDKConfig,
  FTProxyConfig,
  FTProxyAuthenticator,
  FTDnsConfig
} from '@guancecloud/ft_sdk/Index';

const proxyConfig: FTProxyConfig = {
  host: 'proxy.example.com',
  port: 8080,
  exclusionList: ['localhost', '127.0.0.1']
};

const proxyAuthenticator: FTProxyAuthenticator = {
  username: 'proxy-user',
  password: 'proxy-password'
};

const dnsConfig: FTDnsConfig = {
  servers: ['1.1.1.1', '8.8.8.8'],
  overHttpsUrl: 'https://dns.example.com/dns-query'
};

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setProxy(proxyConfig)
  .setProxyAuthenticator(proxyAuthenticator)
  .setDns(dnsConfig);

FTSDK.install(sdkConfig, this.context);

FTProxyConfig

フィールド 型 必須 説明
host string はい プロキシサーバーのアドレス
port number はい プロキシサーバーのポート
exclusionList Array<string> いいえ プロキシを使用しないホストのリスト。NetworkKit のプロキシ除外ルールに従います
username string いいえ プロキシのユーザー名。setProxyAuthenticator(...) で個別に設定することもできます
password string いいえ プロキシのパスワード。setProxyAuthenticator(...) で個別に設定することもできます

FTProxyAuthenticator

フィールド 型 必須 説明
username string はい プロキシ認証のユーザー名
password string はい プロキシ認証のパスワード

FTProxyConfig と FTProxyAuthenticator の両方で認証情報を設定した場合、FTProxyAuthenticator の設定が優先されます。

FTDnsConfig

フィールド 型 必須 説明
servers Array<string> いいえ カスタム DNS サーバーのアドレス。空文字列は無視され、有効な最初の3つのアドレスが最大で使用されます
overHttpsUrl string いいえ DNS over HTTPS サービスアドレス

ブラックリストフィルタリング

ft-sdk 0.1.15 では、DataKit 互換のブラックリストフィルタリングをサポートしています。データがローカルキャッシュに書き込まれる前に Logging データと RUM データをフィルタリングするための機能で、デフォルトで有効です。setEnableDataFilter(false) で無効にできます。

ブラックリストルールは、ローカルルールとリモートルールに分けられます:

  • ローカルルールは setDataFilters で設定し、logging、rum の2種類のルールをサポートします。
  • データフィルタリングが有効で、有効なデータ送信アドレスが存在する場合、SDK は DataKit または DataWay からリモートの logging、rum ルールを取得します。
  • ローカルルールとリモートルールの両方で新しいデータをフィルタリングし、ルールに一致したデータはローカルキャッシュに書き込まれません。
  • データは LineDataModifier で変更された後、変更後の内容に基づいてブラックリストフィルタリングが実行されます。
  • リモートルールはアップロード前に一致したキャッシュデータをクリーンアップします。ローカルルールは新しいデータのみをフィルタリングします。
  • SDK は各アップロードタスクの開始時にリモートルールの有効期限を確認し、期限が切れた場合にのみ取得します。
  • サーバーの pull_interval が数値の場合、単位はナノ秒で、例えば 10000000000 は 10 秒を意味します。文字列 "10" も 10 秒を意味し、"10s"、"2m"、"1h" などの単位付き形式にも対応します。欠落または無効な場合は 10 秒として扱います。
  • サーバーが返す内容に変更がない場合、SDK は同じルールを再解析または再適用しません。

ルール式は {} 内に記述します。in、not in、match、not match 演算子をサポートし、複数の条件は and / or で組み合わせることができます。フィールドの取得元にはデータタグとフィールドが含まれ、source、measurement、class などのデータタイプを識別するフィールドにも対応します。match は正規表現を使用します。

import {
  FTSDK,
  FTSDKConfig,
  FTDataFilters
} from '@guancecloud/ft_sdk/Index';

const dataFilters: FTDataFilters = new Map<string, Array<string>>();
dataFilters.set('logging', [
  "{ source in ['df_rum_harmonyos_log'] and message match ['.*password.*'] }"
]);
dataFilters.set('rum', [
  "{ source in [resource] and resource_status in ['404', '503'] }"
]);

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setEnableDataFilter(true)
  .setDataFilters(dataFilters);

FTSDK.install(sdkConfig, this.context);

FTDataFilters には Map<string, Array<string>> または同じ構造のオブジェクトを渡すことができます。分類名は大文字と小文字を区別しません。logging、rum 以外の分類は無視されます。

// ローカルとリモートのブラックリストフィルタリングを無効にしますが、設定済みのローカルルールは保持されます。
sdkConfig.setEnableDataFilter(false);

// 設定済みのローカルルールをクリアします。サーバーのリモートルールには影響しません。
sdkConfig.setDataFilters(null);

実行時に有効なデータ送信アドレスへ切り替えると、SDK は旧アドレスのリモートルールをクリアし、新しいアドレスから再取得します。ローカルルールは引き続き保持されます。

ユーザーデータの紐付けと解除

使用方法

/**
 * ユーザー情報を紐付けます(ユーザー ID のみ)
 * @param id ユーザー ID
 */
static bindRumUserDataById(id: string): void

/**
 * ユーザー情報を紐付けます(完全なユーザーデータ)
 * @param userData ユーザーデータオブジェクト
 */
static bindRumUserData(userData: UserData): void

/**
 * ユーザー情報の紐付けを解除します
 */
static unbindRumUserData(): void

UserData

メソッド名 説明 必須 注意
setId ユーザー ID を設定 いいえ
setName ユーザー名を設定 いいえ
setEmail メールアドレスを設定 いいえ
setExts ユーザー拡張情報を設定 いいえ 追加ルールは カスタムタグとグローバルコンテキスト を参照してください

コード例

import { FTSDK, UserData } from '@guancecloud/ft_sdk/Index';

// 方法1: ユーザー ID のみを紐付けます(クイック紐付けに推奨)
FTSDK.bindRumUserDataById('user_001');

const userData = new UserData();
userData.setId('user_001');
userData.setName('test.user');
userData.setEmail('test@mail.com');
userData.setExts({
  'user_type': 'vip'
});
FTSDK.bindRumUserData(userData);

FTSDK.unbindRumUserData();

実行時機能

自動データ同期の設定

SDK 初期化後、FTSDK.setAutoSync(...) を使用してキャッシュデータの自動同期を動的に有効または無効にできます。無効にすると、SDK は収集データをローカルキャッシュに書き込みますが、収集後に自動でアップロードをトリガーしません。FTSDK.flushSyncData() と組み合わせてデータ同期を管理できます。

import { FTSDK } from '@guancecloud/ft_sdk/Index';

// 自動同期を無効化
FTSDK.setAutoSync(false);

// 自動同期を有効化
FTSDK.setAutoSync(true);

FTSDKConfig.setAutoSync(...) は SDK 初期化時の同期状態を設定するために使用します。FTSDK.setAutoSync(...) は SDK 初期化後に同期状態を動的に変更するために使用します。

手動データ同期

自動同期が無効な場合、手動でデータ同期をトリガーできます:

import { FTSDK } from '@guancecloud/ft_sdk/Index';

FTSDK.flushSyncData();

自動同期が有効な場合、SDK は 10 秒の集約ウィンドウを使用し、短時間に連続して生成されたデータをまとめてアップロードします。flushSyncData() はこの集約ウィンドウを待ちません。まず現在処理待ちの RUM と Log worker キューを可能な限りローカルの同期キャッシュにフラッシュし、その後すぐにアップロードタスクをスケジュールします。キューのフラッシュに失敗した場合でも、アップロードのトリガーを試行し続けます。

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

import { FTSDK } from '@guancecloud/ft_sdk/Index';

await FTSDK.clearAllData();

clearAllData() は、未送信のキャッシュデータをすべて削除します。対象は以下のとおりです:

  • 同期データテーブル(sync_data_flat)のすべてのデータ
  • RUM ビューデータテーブル(rum_view)のすべてのデータ
  • RUM アクションデータテーブル(rum_action)のすべてのデータ

フィードバック

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