IMQABridge 추가 방법은 React Native를 이용하여 개발되는 케이스마다 달라질 수 있습니다.
1. Component 별 IMQA 설정
함수형 컴포넌트 설정
React Native 앱 성능 데이터 수집을 위해 Component 화면별로 IMQA 수집 코드를 삽입해주어야 합니다. 해당 수집 코드는 함수형 컴포넌트로 작성되었으며 부모 컴포넌트/ 자식 컴포넌트의 따라 설정이 달라 집니다. 제일 우선적으로 rendering이 이루어 지는 상위 컴포넌트 ( 부모 컴포넌트 ) 해당 컴포넌트에서 import 하여 사용되는 컴포넌트 ( 자식 컴포넌트 ) 를 구분하여 아래 설정을 맞게 적용이 되어야 합니다.
( 부모 컴포넌트 )
../components/MyComponent.tsx ( 부모 컴포넌트 )
// MpmAgent importimport MpmAgent from ‘imqa-react-native-agent’; ..constMyComponent= () => {.. useLayoutEffect(() => { // 해당 설정은 화면의 rendering이 이루어 지기전에 호출되어야 하는 함수이므로 // 꼭 useLayoutEffect Hook 에서 적용 부탁 드립니다. MpmAgent?.setBehaviorData("MyComponent"); }, []);useEffect(() => {// useEffect 함수의 최상단에 위치해야 합니다. MpmAgent?.startReactNativeRender("MyComponent",true); ..// useEffect 함수의 최하단에 위치해야 합니다. MpmAgent?.endReactNativeRender("MyComponent",true);}, []);..}
( 자식 컴포넌트 )
../components/MyChildComponent.tsx ( 자식 컴포넌트 )
// MpmAgent importimport MpmAgent from ‘imqa-react-native-agent’; ..constMyChildComponent= () =>useEffect(() => {// useEffect 함수의 최상단에 위치해야 합니다. MpmAgent?.startReactNativeRender("MyChildComponent",false); ..// useEffect 함수의 최하단에 위치해야 합니다. MpmAgent?.endReactNativeRender("MyChildComponent",false);}, []);
클래스형 컴포넌트 설정
React Native 앱 성능 데이터 수집을 위해 Component 화면별로 IMQA 수집 코드를 삽입해주어야 합니다. 해당 수집 코드는 클래스형 컴포넌트로 작성되었으며 부모 컴포넌트/ 자식 컴포넌트의 따라 설정이 달라 집니다. 제일 우선적으로 rendering이 이루어 지는 상위 컴포넌트 ( 부모 컴포넌트 ) 해당 컴포넌트에서 import 하여 사용되는 컴포넌트 ( 자식 컴포넌트 ) 를 구분하여 아래 설정을 맞게 적용이 되어야 합니다.
( 부모 컴포넌트 )
../components/MyComponent.tsx ( 부모 컴포넌트 )
// MpmAgent importimport MpmAgent from ‘imqa-react-native-agent’; ..classMyComponentextendsReact.Component {..componentDidMount() {// componentDidMount 함수의 최상단에 위치해야 합니다. MpmAgent?.setBehaviorData("MyComponent"); MpmAgent?.startReactNativeRender("MyComponent",true); ..// componentDidMount 함수의 최하단에 위치해야 합니다. MpmAgent?.endReactNativeRender("MyComponent",true); }..}
( 자식 컴포넌트 )
../components/MyChildComponent.tsx ( 자식 컴포넌트 )
// MpmAgent importimport MpmAgent from ‘imqa-react-native-agent’; ..classMyChildComponentextendsReact.Component {..componentDidMount() {// componentDidMount 함수의 최상단에 위치해야 합니다. MpmAgent?.startReactNativeRender("MyChildComponent",false); ..// componentDidMount 함수의 최하단에 위치해야 합니다. MpmAgent?.endReactNativeRender("MyChildComponent",false); }..}
2. Network 통신 설정
Axios 를 사용한 Network 통신 시
Axios 라이브러리를 사용하여 Network 통신을 진행하시는 경우 interceptor를 구현하여 네트워크 통신 시 IMQA 수집 코드가 동작할 수 있도록 코드 삽입을 진행해주셔야 합니다.
const axiosInstance = axios.create({
baseURL:"http://sample-api"
});
axiosInstance.interceptors.request.use(
(config) => {
Try{
// network 통신 수집 코드
MpmAgent?.startReactNativeNetwork(
config.baseURL?.toString(),
config.url?.toString(),
config.method?.toString(),
config.baseURL?.split('://')[0]
);
}catch(e){
console.error(e);
}
return config;
},
error => {
// network 통신 시 오류가 발생했을때 아래와 같은형태로 status code를 넣어주셔야 합니다.
MpmAgent?.endReactNativeNetwork("500");
}
);
axiosInstance.interceptors.response.use( response => {
// network 통신 완료 시 status code를 넣어주셔야 합니다.
MpmAgent?.endReactNativeNetwork(response.status.toString());
return response;
});
Fetch 를 사용한 Network 통신 시
Fetch를 사용하여 Network 통신을 진행하시는 경우네트워크 통신 시 IMQA 수집 코드가 동작할 수 있도록 아래 형태로 코드 삽입을 진행해주셔야 합니다.
let url = "http://sample-api";
// network 통신 시작 전 해당 코드가 적용 되어있어야 합니다.
MpmAgent?.startReactNativeNetwork(
url,
"/sample",
"post",
url?.split('://')[0]);
fetch(url)
.then(response => {
MpmAgent?.endReactNativeNetwork(response.status.toString());
return response;
})
.catch(error => {
MpmAgent?.endReactNativeNetwork("500");
});