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。リアルユーザーモニタリング(RUM)コンソールで取得 |
| iOSAppId | string | はい | app_id。リアルユーザーモニタリング(RUM)コンソールで取得 |
| 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 Error を自動収集するかどうか。デフォルトは false |
| enableNativeUserAction | boolean | いいえ | Native Action トラッキングを行うかどうか。ネイティブの Button クリックイベント、アプリ起動イベント。デフォルトは false |
| enableNativeUserView | boolean | いいえ | Native View の自動トラッキングを行うかどうか。純粋な React Native アプリではオフにすることを推奨。デフォルトは false |
| enableNativeUserResource | boolean | いいえ | Native Resource の自動トラッキングを有効にするかどうか。React Native のネットワークリクエストは iOS、Android でシステム API を使用して実装されているため、有効にするとすべての resource データを合わせて収集できます。デフォルトは 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 | いいえ | カスタムタグを追加します。リアルユーザーモニタリング(RUM)データソースの識別に使用します。トラッキング機能を使用する場合、パラメータ 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\<string> | いいえ | データトラッキングを許可する 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¶
startAction と addAction の使い分け
startActionは内部で自動的に Action の所要時間を計算します。計算中は近辺で発生したResource、LongTask、Errorデータとの関連付けを試み、100 ms の頻繁なトリガーを防ぐ保護が設定されています。ユーザー操作タイプのデータに推奨されます。- 頻繁に呼び出す必要がある場合は、
addActionを使用してください。addActionで報告された Action はstartActionと競合せず、現在のResource、LongTask、Errorデータとも関連付けられません。
使用方法¶
/**
* 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 のカスタムルールの詳細については、データ収集カスタムルール を参照してください。