SDK ์—ฐ๋™

๐Ÿ“˜

Hackle Unity SDK๋Š” Android SDK, iOS SDK ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ OS๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Android API 16 (4.1 Jelly Bean) ์ด์ƒ
  • iOS 10 ์ด์ƒ
โ—๏ธ

Unity Editor

Unity SDK๋Š” Desktop์ด๋‚˜ Editor๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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);
    }
}

์ดˆ๊ธฐํ™” ์„ค์ •์ •๋ณด

์„ค์ •์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ SDK๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋ชจ๋“  ์„ค์ • ์˜ต์…˜

์„ค์ •

๊ธฐ๋Šฅ

๊ธฐ๋ณธ๊ฐ’

์ง€์› ๋ฒ„์ „

ExposureEventDedupIntervalMillis

๋™์ผํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฐ์†์œผ๋กœ ๋ฐœ์ƒ์‹œํ‚จ ๋™์ผํ•œ A/B ํ…Œ์ŠคํŠธ, ๊ธฐ๋Šฅํ”Œ๋ž˜๊ทธ ๋ถ„๋ฐฐ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋…ธ์ถœ ์ด๋ฒคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Ÿ๊ฐ’: 1000 (1์ดˆ)
์ตœ๋Œ“๊ฐ’:

  • ~1.8.0 : 3600000 (1์‹œ๊ฐ„)
  • 1.9.0~ : 8640000(24์‹œ๊ฐ„)

60000 (1๋ถ„)

1.7.0+
(1.9.0 ์ดํ›„๋ถ€ํ„ฐ ์•ฑ ์ข…๋ฃŒ ํ›„ ์žฌ์‹œ์ž‘ ์‹œ์—๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.)

Debug

๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ์ฆ‰์‹œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

false

1.7.0+

PollingIntervalMillis

๋Œ€์‹œ๋ณด๋“œ์—์„œ ์„ค์ •ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์†Ÿ๊ฐ’ : 60000 (60์ดˆ)

-1
(์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Œ)

1.7.0+


์ธ์Šคํ„ด์Šค ๊ฐ€์ ธ์˜ค๊ธฐ

์ดˆ๊ธฐํ™” ์ดํ›„ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Hackle ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Hackle hackle = Hackle.GetInstance();