RUM 設定¶
RUM 初期設定¶
let rumConfig: FTRUMConfig = {
androidAppId: Config.ANDROID_APP_ID,
iOSAppId: Config.IOS_APP_ID,
enableAutoTrackUserAction: true,
enableAutoTrackError: true,
enableNativeUserAction: true,
enableNativeUserView: false,
enableNativeUserResource: true,
errorMonitorType: ErrorMonitorType.all,
deviceMonitorType: DeviceMetricsMonitorType.all,
detectFrequency: DetectFrequency.rare,
};
await FTReactNativeRUM.setConfig(rumConfig);
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| androidAppId | string | はい | app_id。リアルユーザーモニタリングコンソールで取得 |
| iOSAppId | string | はい | app_id。リアルユーザーモニタリングコンソールで取得 |
| sampleRate | number | いいえ | サンプリングレート。範囲 [0,1]、0 は収集なし、1 は全収集、デフォルトは 1。同一 session_id 内のすべての View、Action、LongTask、Error データに適用 |
| sessionOnErrorSampleRate | number | いいえ | エラー収集レート。sampleRate でサンプリングされなかったセッションでも、セッション中にエラーが発生した場合、エラー発生前 1 分間のデータを収集可能。範囲 [0,1]、0 は収集なし、1 は全収集、デフォルトは 0。同一 session_id 内のすべての View、Action、LongTask、Error データに適用。SDK 0.3.14 以上で対応 |
| enableAutoTrackUserAction | boolean | いいえ | React Native コンポーネントのクリックイベントを自動収集するかどうか。有効にすると、accessibilityLabel を使用して actionName を設定可能 |
| enableAutoTrackError | boolean | いいえ | React Native エラーを自動収集するかどうか。デフォルトは false |
| enableNativeUserAction | boolean | いいえ | Native Action トラッキングを行うかどうか。ネイティブの Button クリックイベント、アプリ起動イベント。デフォルトは false |
| enableNativeUserView | boolean | いいえ | Native View 自動トラッキングを行うかどうか。純粋な React Native アプリではオフ推奨。デフォルトは false |
| enableNativeUserResource | boolean | いいえ | Native Resource 自動トラッキングを有効にするかどうか。React Native のネットワークリクエストは iOS、Android 側でシステム API を使用して実装されるため、有効にするとすべてのリソースデータを収集可能。デフォルトは false |
| errorMonitorType | enum ErrorMonitorType | いいえ | 補助モニタリング情報を設定。RUM Error データに追加のモニタリングデータを添付。デフォルトは無効 |
| deviceMonitorType | enum DeviceMetricsMonitorType | いいえ | View 周期にモニタリングデータを追加。デフォルトは無効 |
| detectFrequency | enum DetectFrequency | いいえ | ビューパフォーマンスモニタリングのサンプリング周期。デフォルトは DetectFrequency.normal |
| enableResourceHostIP | boolean | いいえ | リクエスト先ドメインの IP を収集するかどうか。スコープ:enableNativeUserResource = true のデフォルト収集のみ影響。iOS:>= iOS 13 で対応;Android:同一 OkhttpClient に IP キャッシュ機構あり |
| globalContext | object | いいえ | カスタムタグを追加。ユーザー監視データソースの識別用。トラッキング機能を使用する場合は、パラメータ key を track_id、value を任意の数値に設定。追加ルールの注意事項はこちらを参照 |
| enableTrackNativeCrash | boolean | いいえ | Android Java Crash および OC/C/C++ クラッシュ監視を有効にするかどうか。デフォルトは false |
| enableTrackNativeAppANR | boolean | いいえ | Native ANR 監視を有効にするかどうか。デフォルトは false |
| enableTrackNativeFreeze | boolean | いいえ | Native Freeze を収集するかどうか。デフォルトは false |
| nativeFreezeDurationMs | number | いいえ | Native Freeze のカクつき閾値。範囲 [100,)、単位はミリ秒。iOS デフォルト 250ms、Android デフォルト 1000ms |
| rumDiscardStrategy | string | いいえ | 破棄戦略:FTRUMCacheDiscard.discard は新しいデータを破棄(デフォルト)、FTRUMCacheDiscard.discardOldest は古いデータを破棄 |
| rumCacheLimitCount | number | いいえ | ローカルキャッシュにおける RUM エントリの最大数制限 [10_000,)、デフォルト 100_000 |
| enableTraceWebView | boolean | いいえ | WebView データの収集を有効にするかどうか。デフォルトは true。SDK 0.3.16 以上で対応 |
| allowWebViewHost | Array |
いいえ | データトラッキングを許可する WebView の host アドレス。null の場合はすべて収集、デフォルトは null。SDK 0.3.16 以上で対応 |
| iosCrashMonitoringType | enum IOSCrashMonitoringType | いいえ | SDK クラッシュ監視のタイプ範囲を設定。デフォルトは IOSCrashMonitoringType.highCompatibility。SDK 0.3.16 以上で対応 |
RUM ユーザーデータトラッキング¶
FTRUMConfig では、enableAutoTrackUserAction、enableAutoTrackError、enableNativeUserAction、enableNativeUserView、enableNativeUserResource などの設定で自動収集を実現できます。手動収集が必要な場合は、以下の API も使用可能です。
View¶
SDK 初期化時に RUM 設定 で enableNativeUserView を設定すると、Native View の自動収集を有効化できます。React Native View については、React Native が画面ナビゲーションを作成するための豊富なライブラリを提供しているため、デフォルトでは手動収集のみ対応しています。React Native View の自動収集が必要な場合は、以下の「React Native View の自動収集」を参照してください。
使用方法¶
/**
* view のロード時間。
*/
onCreateView(viewName: string, loadTime: number): Promise<void>;
/**
* view 開始。
*/
startView(viewName: string, property?: object): Promise<void>;
/**
* view 終了。
*/
stopView(property?: object): Promise<void>;
使用例¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.onCreateView('viewName', duration);
FTReactNativeRUM.startView('viewName', { 'custom.foo': 'something' });
FTReactNativeRUM.stopView({ 'custom.foo': 'something' });
React Native View の自動収集¶
React Native で react-native-navigation、react-navigation、または Expo Router ナビゲーションコンポーネントを使用している場合、以下の方法で React Native View の自動収集が可能です。
react-native-navigation¶
example から FTRumReactNavigationTracking.tsx ファイルをプロジェクトに追加してください。
FTRumReactNativeNavigationTracking.startTracking() メソッドを呼び出して収集を開始します。
import { FTRumReactNativeNavigationTracking } from './FTRumReactNativeNavigationTracking';
function startReactNativeNavigation() {
FTRumReactNativeNavigationTracking.startTracking();
registerScreens();
Navigation.events().registerAppLaunchedListener(async () => {
await Navigation.setRoot({
root: {
stack: {
children: [{ component: { name: 'Home' } }],
},
},
});
});
}
react-navigation¶
example から FTRumReactNavigationTracking.tsx ファイルをプロジェクトに追加してください。
- 方法 1:
createNativeStackNavigator(); を使用してネイティブナビゲーションスタックを作成している場合は、screenListeners を追加して収集を開始する方法をお勧めします。これによりページのロード時間を計測できます。具体的な使用方法は以下の通りです。
import { FTRumReactNavigationTracking } from './FTRumReactNavigationTracking';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
<Stack.Navigator
screenListeners={FTRumReactNavigationTracking.StackListener}
initialRouteName="Home"
>
<Stack.Screen name="Home" component={Home} options={{ headerShown: false }} />
<Stack.Screen name="Mine" component={Mine} options={{ title: 'Mine' }} />
</Stack.Navigator>;
- 方法 2:
createNativeStackNavigator(); を使用していない場合は、NavigationContainer コンポーネントに自動収集メソッドを追加します。以下のように設定してください。
注意:この方法ではページのロード時間を収集できません。
import { FTRumReactNavigationTracking } from './FTRumReactNavigationTracking';
import type { NavigationContainerRef } from '@react-navigation/native';
const navigationRef: React.RefObject<
NavigationContainerRef<ReactNavigation.RootParamList>
> = React.createRef();
<NavigationContainer
ref={navigationRef}
onReady={() => {
FTRumReactNavigationTracking.startTrackingViews(navigationRef.current);
}}
>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={Home} options={{ headerShown: false }} />
<Stack.Screen name="Mine" component={Mine} options={{ title: 'Mine' }} />
</Stack.Navigator>
</NavigationContainer>;
具体的な使用例は example を参照してください。
Expo Router¶
Expo Router を使用している場合は、app/_layout.js ファイルに以下のメソッドを追加してデータ収集を行います。
import { useEffect } from 'react';
import { useSegments, usePathname, Slot } from 'expo-router';
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
export default function Layout() {
const pathname = usePathname();
const segments = useSegments();
const viewKey = segments.join('/');
useEffect(() => {
FTReactNativeRUM.startView(viewKey);
}, [viewKey, pathname]);
return <Slot />;
}
Action¶
使用方法¶
/**
* RUM Action を開始します。
*/
startAction(actionName: string, actionType: string, property?: object): Promise<void>;
/**
* Action イベントを追加します。
*/
addAction(actionName: string, actionType: string, property?: object): Promise<void>;
使用例¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.startAction('actionName', 'actionType', { 'custom.foo': 'something' });
FTReactNativeRUM.addAction('actionName', 'actionType', { 'custom.foo': 'something' });
Error¶
使用方法¶
/**
* 例外キャプチャとログ収集。
*/
addError(stack: string, message: string, property?: object): Promise<void>;
/**
* エラータイプを指定した例外キャプチャとログ収集。
*/
addErrorWithType(type: string, stack: string, message: string, property?: object): Promise<void>;
使用例¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.addError('error stack', 'error message', { 'custom.foo': 'something' });
FTReactNativeRUM.addErrorWithType('custom_error', 'error stack', 'error message', {
'custom.foo': 'something',
});
Resource¶
使用方法¶
/**
* リソースリクエストを開始します。
*/
startResource(key: string, property?: object): Promise<void>;
/**
* リソースリクエストを終了します。
*/
stopResource(key: string, property?: object): Promise<void>;
/**
* リソースデータメトリクスを送信します。
*/
addResource(key: string, resource: FTRUMResource, metrics?: FTRUMResourceMetrics): Promise<void>;
使用例¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
async function getHttp(url: string) {
const key = Utils.getUUID();
FTReactNativeRUM.startResource(key);
const fetchOptions = {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
};
let res: Response;
try {
res = await fetch(url, fetchOptions);
} finally {
const resource: FTRUMResource = {
url: url,
httpMethod: fetchOptions.method,
requestHeader: fetchOptions.headers,
};
if (res) {
resource.responseHeader = res.headers;
resource.resourceStatus = res.status;
resource.responseBody = await res.text();
}
FTReactNativeRUM.stopResource(key);
FTReactNativeRUM.addResource(key, resource);
}
}
Action のカスタムルールの詳細は、データ収集カスタムルール を参照してください。