SDK 연동
몇 가지 단계를 거쳐 빠르게 SDK 연동을 시작해보세요.
- 의존성 추가
- SDK 초기화
- 사용자 설정
- 이벤트 전송
- A/B 테스트
- 기능 플래그
1. 의존성 추가
npm install --save @hackler/react-native-sdk
react-native link
cd ios
pod install
yarn add @hackler/react-native-sdk
react-native link
cd ios
pod install
SDK 설치 후 앱 재설치
React Native SDK는 Android, iOS SDK가 포함되어 있습니다.
기존에 테스트 중이던 앱을 새롭게 빌드해야 연동이 완료됩니다.
2. 안드로이드 설정
Application
클래스에 다음과 같은 코드를 onCreate
함수 아래 추가해 주세요.
생성된 Application 클래스가 없다면 새로 생성하여
AndroidManifest.xml
에 등록해 주세요.
import android.app.Application;
import io.hackle.android.HackleApp;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
...
HackleApp.registerActivityLifecycleCallbacks(this);
...
}
}
import android.app.Application
import io.hackle.android.Hackle
import io.hackle.android.registerActivityLifecycleCallbacks
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
...
Hackle.registerActivityLifecycleCallbacks(this)
...
}
}
3. SDK 초기화
SDK를 사용하기 위해서 반드시 createInstance()
에 SDK 키를 전달하여 HackleReactNativeSDKClient
를 생성하고 React 어플리케이션을 감싸는 HackleProvider
에 전달해야 합니다.
- SDK 키는 핵클 서비스의 대시보드 안에 위치한 SDK 연동 정보에서 확인하실 수 있습니다.
- 어플리케이션 초기화 단계에 핵클 서버와 데이터 동기화를 위한 통신을 진행합니다. 일반적으로 이 시간은 수 밀리 초에 불과합니다. 동기화가 완료되면 즉시 렌더링이 진행됩니다.
import { createInstance, HackleProvider } from "@hackler/react-native-sdk";
// YOUR_APP_SDK_KEY 자리에 SDK 키를 넣습니다.
const hackleClient = createInstance("YOUR_APP_SDK_KEY");
const App = () => {
return (
<HackleProvider hackleClient={hackleClient}>
<YourApp />
</HackleProvider>
);
};
초기화 설정정보
설정정보를 포함하여 SDK를 초기화 할 수 있습니다
import { createInstance, HackleProvider } from "@hackler/react-native-sdk";
const config = {
debug: true
};
const hackleClient = createInstance("YOUR_APP_SDK_KEY", config);
const App = () => {
return (
<HackleProvider hackleClient={hackleClient}>
<YourApp />
</HackleProvider>
);
};
설정 | 기능 | 기본값 | 지원 버전 |
---|---|---|---|
exposureEventDedupIntervalMillis | 동일한 사용자가 연속으로 발생시킨 동일한 A/B 테스트, 기능플래그 분배결과에 대한 노출 이벤트를 제거합니다. 최솟값: 1000 (1초) 최댓값: 3600000 (1시간) | -1 (중복제거 하지 않음) | 3.3.1+ |
debug | 모든 기능에 대한 로그를 콘솔에 출력하고, 이벤트를 즉시 전송합니다. | false | 3.4.1+ |
pollingIntervalMillis | 대시보드에서 설정한 정보를 주기적으로 업데이트 할 수 있습니다. 최솟값 : 60000 (60초) | -1 (주기적으로 업데이트하지 않음) | 3.6.0+ |
sessionTimeoutMillis | 세션만료 시간을 설정합니다. | 1800000 (30분) | 3.11.0+ |
대시보드 설정 정보 갱신
대시보드 설정 정보를 명시적으로 갱신 할 수 있습니다.
hackleClient.fetch();
핵클 React Native SDK 3.10.0 이상 버전에서 지원하는 기능입니다.
해당 함수는 60초에 한번 제한적으로 호출할 수 있습니다.
4. 사용자 설정
사용자 정보를 SDK에 설정 할 수 있습니다.
사용자 ID 설정
사용자가 로그인한 경우, setUserId
를 호출해서 로그인한 사용자의 ID를 설정할 수 있습니다.
- 로그인 시 한번만 설정하면 됩니다.
- 이미 로그인이 되어있는 사용자의 경우에는 로그인한 정보를 확인하는 시점에 호출하면 됩니다.
const userId = ...; // 로그인한 사용자의 ID (회원번호, 멤버 ID 등)
hackleClient.setUserId(userId);
사용자 속성 설정
이메일주소, 위치, 나이, 회원등급과 같은 정보를 사용자 속성으로 사용할 수 있습니다. setUserProperty
, setUserProperties
를 호출하여 사용자 속성을 설정할 수 있습니다.
import { PropertyOperationsBuilder } from "@hackler/react-native-sdk"
const operations = new PropertyOperationsBuilder()
.set("age", 42)
.set("grade", "GOLD")
.build();
hackleClient.updateUserProperties(operations);
사용자 로그아웃 시 재설정
사용자가 로그아웃 한 경우 resetUser
를 호출하여 기존에 설정한 사용자 정보를 리셋할 수 있습니다. 아래 정보가 리셋됩니다.
- 사용자 ID
- 사용자 속성
hackleClient.resetUser();
5. 이벤트 전송
사용자가 수행하는 행동을 이벤트로 전송할 수 있습니다. 전송된 이벤트는 A/B 테스트 분석, 데이터 분석 등에 사용됩니다. 예를들어, 사용자가 구매라는 행동을 했다면 아래와 같이 이벤트를 전송할 수 있습니다.
// 이벤트 전송
const track = useTrack()
const event = { key: "purchase" }
<Button onClick={() => track(event)}>구매</Button>
// 이벤트를 속성과 함께 전송
const track = useTrack()
const event = {
key: "purchase",
properties: {
amount: 4200,
pay_method: "CARD",
is_discount: false
}
}
<Button onClick={() => track(event)}>구매</Button>
전송한 이벤트 확인하기
대시보드 이벤트관리 메뉴에서 전송한 이벤트를 확인할 수 있습니다. 이벤트 전송 후 대시보드에 표시되기까지 일반적으로 ~60초가 걸립니다.
6. A/B 테스트
사용자를 테스트 그룹으로 분배하고 분배된 결과에 해당하는 로직을 작성하여 A/B 테스트를 구현합니다. HackleExperiment
컴포넌트 혹은 useVariation
hook에 실험키를 전달하여 호출하면 분배결과를 리턴받을 수 있습니다.
실험키: 각 A/B 테스트별로 갖게 되는 고유 번호입니다. A/B 테스트를 생성하면 자동으로 발급됩니다.
function App() {
return (
// 실험 키가 42인 A/B 테스트에서 사용자에게 노출할 테스트 그룹을 결정합니다.
// 결정하지 못하는 상황인 경우 테스트 그룹 A를 반환합니다.
<HackleExperiment experimentKey={42}>
<HackleVariation variation={"A"}> // 할당받은 그룹에 대한 로직
<AwesomeFeature />
</HackleVariation>
<HackleVariation variation={"B"}>
<SuperAwesomeFeature />
</HackleVariation>
</HackleExperiment>
)
}
function App() {
// 실험 키가 42인 A/B 테스트에서 사용자에게 노출할 테스트 그룹을 결정합니다.
// 결정하지 못하는 상황인 경우 테스트 그룹 A를 반환합니다.
const variation = useVariation(42)
// 할당받은 그룹에 대한 로직
if (variation === "A") return <AwesomeFeature />
if (variation === "B") return <SuperAwesomeFeature />
return <AwesomeFeature />
}
분배 결과 확인하기
대시보드 A/B 테스트의 상세페이지의 실시간 노출 현황 탭에서 분배된 결과를 확인할 수 있습니다. 분배 후 대시보드에 표시되기까지 일반적으로 ~60초가 걸립니다.
7. 기능 플래그
기능 플래그는 켜짐(on) 상태와 꺼짐(off) 상태가 있습니다. 상태에 따라 다른 로직을 작성하여 기능 플래그를 구현합니다. HackleFeature
컴포넌트 혹은 useFeature
hook 에 기능플래그키를 전달하여 호출하면 on/off 여부를 리턴받을 수 있습니다.
기능플래그키: 각 기능플래그별로 갖게 되는 고유 번호입니다. 기능플래그를 생성하면 자동으로 발급됩니다.
function App() {
return (
// 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
// 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
<Feature featureKey={42}>
{(featureOn) =>
featureOn ? (
<SuperAwesomeFeature /> // 켜짐 상태일 때의 기능
) : (
<AwesomeFeature /> // 꺼짐 상태일 때의 기능
)
}
</Feature>
)
}
function App() {
// 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
// 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
const featureOn = useFeature(42)
return (
<>
{
featureOn ? (
<SuperAwesomeFeature /> // 켜짐 상태일 때의 기능
) : (
<AwesomeFeature /> // 꺼짐 상태일 때의 기능
)
}
</>
)
}
Updated 6 months ago