SDK 연동

몇 가지 단계를 거쳐 빠르게 SDK 연동을 시작해보세요.

  1. SDK 설치
  2. SDK 초기화
  3. 사용자 설정
  4. 이벤트 전송
  5. A/B 테스트
  6. 기능 플래그

1. SDK 설치

Unity Package Manager를 통해 SDK 설치가 필요합니다.

여기를 클릭하여, SDK를 다운로드 받습니다.

Unity에서 Assets > Import Package > Custom Package를 클릭합니다.
다운받은 package를 선택하고, import 하면 설치가 완료됩니다.

Android ProGuard / R8

ProGuard, R8을 사용하는 경우, aar 아티팩트에 난독화 규칙이 자동으로 포함됩니다. 이 경우가 아니라면 아래 규칙을 포함시켜야 합니다.

-keep class io.hackle.android.** { *; }
-keep class io.hackle.sdk.** { *; }

📘

SDK 설치 후 앱 재설치

Unity SDK는 Android, iOS SDK가 포함되어 있습니다.
기존에 테스트 중이던 앱을 새롭게 빌드해야 연동이 완료됩니다.

업데이트 시 유의사항

업데이트를 하시는 경우, 기존 import 된 라이브러리 중 위의 선택된 라이브러리 삭제 후 다시 import 작업을 진행해야합니다.

  • hackle-android-sdk-x.x.x
  • hackle-android-unity-wrapper-x.x.x
  • hackle-sdk-common-x.x.x
  • hackle-sdk-core-x.x.x
  • ios-arm64_armv7
  • ios-arm64_i386_x86_64-simulator

Android SDK 의존성 관리

Android에서는 아래와 같은 의존성 라이브러리를 가지고 있습니다.
Unity SDK가 Android 환경에서 동작을 하지 않는 경우 아래 라이브러리가 존재하는지 확인이 필요합니다.

  • hackle-android-sdk-2.12.0
  • hackle-android-unity-wrapper-1.5.0
  • hackle-sdk-common-2.9.0
  • hackle-sdk-core-2.9.0
  • core-common
  • gson
  • kotlin-stdlib
  • lifecycle-common
  • lifecycle-extensions
  • lifecycle-process
  • lifecycle-runtime
  • okhttp
  • okio

2. SDK 초기화

SDK를 사용하기 위해서 반드시 Hackle을 초기화 해야 합니다. Hackle을 초기화 하기 위해 SDK 키가 필요합니다.

  • Hackle은 SDK의 기능을 사용하기 위한 메소드들을 제공하는 클래스입니다.
  • Initialize() 메소드에 SDK 키를 전달하여 초기화하고, 초기화 완료 시까지 기다리기 위해 await를 합니다.
  • SDK 키는 핵클 서비스의 대시보드 안에 위치한 SDK 연동 정보에서 확인하실 수 있습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HackleInit : MonoBehaviour
{
    async void Awake () {
        await Hackle.Initialize(YOUR_APP_SDK_KEY);
    }
}

인스턴스 가져오기

초기화 이후 아래 코드를 통해 Hackle 인스턴스를 가져올 수 있습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

Hackle hackle = Hackle.GetInstance();

초기화 설정정보

설정정보를 포함하여 SDK를 초기화 할 수 있습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HackleInit : MonoBehaviour
{
    async void Awake () {
    		HackleConfig config = new HackleConfig.Builder()
        	.ExposureEventDedupIntervalMillis(1000)
          .Build();
    
        await Hackle.Initialize("YOUR_APP_SDK_KEY", config: config);
    }
}

모든 설정 옵션

설정기능기본값지원 버전
ExposureEventDedupIntervalMillis동일한 사용자가 연속으로 발생시킨 동일한 A/B 테스트, 기능플래그 분배결과에 대한 노출 이벤트를 제거합니다.

최솟값: 1000 (1초)
최댓값: 3600000 (1시간)
60000 (1분)1.7.0+
Debug모든 기능에 대한 로그를 콘솔에 출력하고, 이벤트를 즉시 전송합니다.false1.7.0+
PollingIntervalMillis대시보드에서 설정한 정보를 주기적으로 업데이트 할 수 있습니다.

최솟값 : 60000 (60초)
-1
(주기적으로 업데이트하지 않음)
1.7.0+

3. 사용자 설정

사용자 정보를 SDK에 설정 할 수 있습니다.

사용자 ID 설정

사용자가 로그인한 경우, SetUserId를 호출해서 로그인한 사용자의 ID를 설정할 수 있습니다.

  • 로그인 시 한번만 설정하면 됩니다.
  • 이미 로그인이 되어있는 사용자의 경우에는 로그인한 정보를 확인하는 시점에 호출하면 됩니다.
string userId = ... // 로그인한 사용자의 ID (회원번호, 멤버 ID 등)
hackle.SetUserId(userId);

사용자 속성 설정

이메일주소, 위치, 나이, 회원등급과 같은 정보를 사용자 속성으로 사용할 수 있습니다.

PropertyOperations operations = new PropertyOperations.Builder()
  .Set("age", 42)
  .Set("grade", "GOLD")
  .Build();

hackle.UpdateUserProperties(operations);

사용자 로그아웃 시 재설정

사용자가 로그아웃 한 경우 ResetUser를 호출하여 기존에 설정한 사용자 정보를 리셋할 수 있습니다. 아래 정보가 리셋됩니다.

  • 사용자 ID
  • 사용자 속성
hackle.ResetUser();

4. 이벤트 전송

사용자가 수행하는 행동을 이벤트로 전송할 수 있습니다. 전송된 이벤트는 A/B 테스트 분석, 데이터 분석 등에 사용됩니다. 예를들어, 사용자가 구매라는 행동을 했다면 아래와 같이 이벤트를 전송할 수 있습니다.

// 이벤트 전송
hackle.Track("purchase")

// 이벤트를 속성과 함께 전송
Dictionary<string, object> properties = new Dictionary<string, object>();
properties["amount"] = 4200;
properties["pay_method"] = "CARD";
properties["is_discount"] = false;
properties["product_ids"] = [42, 43];

HackleEvent event = new HackleEvent(
  eventKey: "purchase",
  properties: properties
);

hackle.Track(event);

전송한 이벤트 확인하기

대시보드 이벤트관리 메뉴에서 전송한 이벤트를 확인할 수 있습니다. 이벤트 전송 후 대시보드에 표시되기까지 일반적으로 ~60초가 걸립니다.


5. A/B 테스트

사용자를 테스트 그룹으로 분배하고 분배된 결과에 해당하는 로직을 작성하여 A/B 테스트를 구현합니다. variation에 실험키를 전달하여 호출하면 분배결과를 리턴받을 수 있습니다.

실험키: 각 A/B 테스트별로 갖게 되는 고유 번호입니다. A/B 테스트를 생성하면 자동으로 발급됩니다.

// 실험 키가 42인 A/B 테스트에서 사용자에게 노출할 테스트 그룹을 결정합니다.
string variation = hackle.Variation(42);

// 할당받은 그룹에 대한 로직
if (variation == "A") {
  // 그룹 A 로직
} else if (variation == "B") {
  // 그룹 B 로직
}

분배 결과 확인하기

대시보드 A/B 테스트의 상세페이지의 실시간 노출 현황 탭에서 분배된 결과를 확인할 수 있습니다. 분배 후 대시보드에 표시되기까지 일반적으로 ~60초가 걸립니다.


6. 기능 플래그

기능 플래그는 켜짐(on) 상태와 꺼짐(off) 상태가 있습니다. 상태에 따라 다른 로직을 작성하여 기능 플래그를 구현합니다. isFeatureOn에 기능플래그키를 전달하여 호출하면 on/off 여부를 리턴받을 수 있습니다.

기능플래그키: 각 기능플래그별로 갖게 되는 고유 번호입니다. 기능플래그를 생성하면 자동으로 발급됩니다.

🚧

Unity Editor

Unity SDK는 Android, iOS SDK를 기반으로 동작합니다.
따라서, Unity Editor에서는 꺼짐(off)상태인 false를 리턴합니다.

// 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
// 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
bool isFeatureOn = hackle.IsFeatureOn(42);

if (isFeatureOn) {
    // ON 기능
} else {
    // OFF 기능
}