For the complete documentation index, see llms.txt. This page is also available as Markdown.

웹앱 연동 (deprecated)

WebView를 통해 자사 웹사이트를 랜더링하는 경우, 아래 설정을 통해 웹사이트에 포함된 핵클 JavaScript SDK를 웹사이트 코드 변경없이 핵클 React Native SDK 기능과 동일하게 사용할 수 있습니다.

React Native 웹앱 연동을 위해서 아래의 작업이 필요합니다.

  • React Native SDK에서 WebView를 렌더링하는 시점에 브릿지를 추가합니다.

  • WebView에서 사용하는 JavaScript SDK를 래핑하여 ReactNative 전용 Client를 생성해야합니다.

React Native

React Native SDK가 설치된 클라이언트 사이드에서 아래 작업을 진행해주세요.

Github: 0.0.3

  1. 위 소스 코드의 useHackleWebviewManager 를 프로젝트에 추가합니다. 1-1. 기존에 사용하던 useHackleWebviewManager가 있다면 스크립트를 덮어써주세요.

  2. useHackleWebviewManager hook을 통해 WebView에 prop을 전달합니다.

ReactNative WebView JS Injection

구분
설명

hackleInjectedJavaScript

웹뷰의 JavaScript SDK가 React Native SDK에게 기능을 대신 처리하도록 메세지를 전달합니다.

onHackleMessage

javaScript SDK로 부터 전달받은 메세지를 React Native SDK에서 처리합니다.

const hackleClient = createInstance("YOUR_SDK_KEY");

function App() {
  const webviewRef = useRef(null);
  const { hackleInjectedJavaScript, onHackleMessage, isHackleMessageEvent } =
        useHackleWebviewManager({
          postMessage: (message) => webviewRef.current?.postMessage(message),
          hackleClient,
        });

  return (
      <HackleProvider hackleClient={hackleClient}>
        <SafeAreaView>
          <View>
            <WebView
              ref={webviewRef}
              source={{ uri: "web_url" }}
              injectedJavaScriptBeforeContentLoaded={hackleInjectedJavaScript}
              onMessage={(e) => {
                if (isHackleMessageEvent(e)) {
                  onHackleMessage(e.nativeEvent.data);
                  return;
                }
              }}
            />
          </View>
        </SafeAreaView>
      </HackleProvider>
    );
}

웹뷰에서 발생하는 자동 수집 이벤트 연동

JavaScript SDK 11.51.0 이상 버전에서 지원하는 기능입니다.

웹뷰 내 웹사이트에서 발생하는 $page_view$engagement는 비활성화 상태입니다. 웹뷰 브릿지를 설정할 때 HackleWebViewConfig를 설정하여 자동 수집 이벤트를 각각 활성화할 수 있습니다.

설정 옵션

설정
기능
기본값
지원 브릿지 버전

automaticScreenTracking

웹사이트에서 발생해는 $page_view 수집 여부

false

0.0.3 +

automaticEngagementTracking

웹사이트에서 발생하는 engagement 수집 여부

false

0.0.3 +

JavaScript

JavaScript SDK가 설치 된 웹 사이드에서 아래 작업을 진행해주세요.

JavaScript 브릿지 코드는 다음과 같은 동작을 합니다.

  • JavaScript SDK의 hackleClient와 동일한 인터페이스를 갖는 Wrapper Client를 생성합니다.

  • Web 환경에서 발생하는 track, variation, featureFlag 등의 요청을 받아서 React Native SDK로 비동기 전달합니다.

  • 이를 위한 브릿지 형태의 코드이고, 모든 메서드가 Promise를 반환한다는 점이 기존 hackleClient와의 차이입니다.

위 소스 코드를 프로젝트에 추가합니다.

  • esm 사용을 권장합니다. default export 형태로 모듈이 제공됩니다.

  • 모듈을 사용할 수 없는 환경이라면 umd를 사용하세요.

    • 전역 스코프에 HackleManager 라는 이름으로 모듈이 제공됩니다.

소스코드 연동

소스 코드를 npm package로 제공하고 있지 않습니다.

아래의 단계별 연동 가이드보다 더 자세한 연동 방법은 아래의 레포지토리에서 예제를 통해 확인해보세요.

TypeScript 지원

githubreact-native-webview-integration-js-bridge 를 build하면 타입 선언 파일 (d.ts)가 emit 됩니다.

react-native-webview-nextjs-integration 를 참고하세요.

lib 디렉토리를 활용해 file dependency를 참조하는 예시를 제공합니다.

인스턴스 생성

아래와 같이 createInstance 를 호출하면 인스턴스를 생성할 수 있습니다.

import 경로는 설치한 환경에 따라 기입해주세요.

  • 생성한 인스턴스를 export 하여 사용합니다.

메서드 호출

모든 메서드의 반환 타입이 Promise 임을 인지해야 합니다.

지원하는 메서드의 종류는 JavaScript/ReactNative SDK 문서를 참고해주세요.

React/Vue/Next.js를 사용하고 있나요?

React Native WebView 안에서 Vue, React, Next.js 등의 라이브러리/프레임워크를 사용하고 있다면 아래의 가이드를 참고해주세요.

Examples

React

기존의 react-sdk의 Custom hooks와 유사한 형태의 hooks를 만들어서 사용할 수 있습니다.

Example에 포함된 hooks 들을 참고하여 필요한 hooks를 작성해서 사용하세요.

왜 Loading 처리를 해야하나요?

메시지 송수신의 지연시간이 길지는 않으나, 로딩 처리를 하는 것을 권장합니다.

  • 실험(variation)의 결과 값을 받아온 이후에 사용자가 최초에 본 것과 다른 화면을 보게 되는 것을 방지하고자 합니다.

Github: Source

마지막 업데이트