필수 조건
원활한 연동 과정을 위해 Singular Unity SDK를 설치하기 전에 다음 필수 전제 조건을 완료하십시오.
필수 전제 조건:
- 계획 단계 완료: 'Singular SDK 연동: 계획 및 필수 사항' 가이드의 지침을 따르세요. 이 단계들은 모든 Singular SDK 연동에 필수적입니다.
- 의존성 관리자 확인: 프로젝트에서 Google EDM4U (Unity용 외부 의존성 관리자)를 사용하는지 확인하십시오. Google EDM4U에 대해 자세히 알아보세요.
-
.unitypackage에서 업그레이드하시나요? 기존
.unitypackage에서 새로운UPM패키지로 마이그레이션하는 경우, 진행하기 전에 업그레이드 지침을 읽어보십시오.
설치
Unity Package Manager(UPM)를 통한 설치
Singular Unity SDK는 Unity Package Manager를 통해 Git URL을 사용하여 설치됩니다. 다음 단계를 따라 프로젝트에 SDK를 추가하십시오.
설치 단계
- 패키지 관리자 열기: Unity에서 Window > Package Manager로 이동합니다.
- Git에서 패키지 추가: 왼쪽 상단 모서리의 [+] 버튼을 클릭하고 "Git URL에서 패키지 추가"를 선택합니다.
-
Git URL 입력:
-
표준 SDK의 경우:
https://github.com/singular-labs/Singular-Unity-SDK.git -
키즈 SDK의 경우: 입력
https://github.com/singular-labs/Singular-Unity-SDK.git#kids
-
표준 SDK의 경우:
- 설치 완료: "추가"를 클릭하여 SDK 패키지를 설치합니다.
Google EDM4U를 사용하지 않으시나요? 프로젝트에서 외부 종속성 관리자를 사용하지 않는 경우, 네이티브 종속성을 수동으로 다운로드하여 추가해야 합니다.
수동 종속성 설치
-
의존성 다운로드: Singular의 S3 버킷에서 적절한
Plugins.zip파일을 다운로드하세요:-
표준 SDK (v5.7.0):
Standard SDK 플러그인 다운로드 -
Kids SDK (v5.6.0):
Kids SDK 플러그인 다운로드
-
표준 SDK (v5.7.0):
- Assets로 추출: 다운로드한 파일을 추출한 후 Unity 프로젝트의 Assets > Plugins 폴더로 이동합니다.
-
iOS 프레임워크 구성:
Assets > Plugins > iOS로 이동하여
Singular.xcframework를 선택합니다. - 바이너리 삽입: 인스펙터 패널에서 "Add to Embedded Binaries" 옵션을 선택합니다.
Android 구성 팁
SDK가 제대로 작동하도록 Android 빌드 설정을 구성하십시오. Unity는 Android 매니페스트와 Gradle 파일을 사용자 정의할 수 있는 여러 방법을 제공합니다.
다음 두 가지 방법 중 하나를 사용하여 AndroidManifest를 수정할 수 있습니다:
방법 1: Unity 사용자 지정 매니페스트
- 다음 경로로 이동하세요. 파일 > 빌드 설정 > 플레이어 설정 > 게시 설정.
- 'Publishing Settings' 섹션에서 "Custom Main Manifest"를 활성화합니다.
-
Unity는 Assets/Plugins/Android/AndroidManifest.xml에
기본
AndroidManifest.xml파일을 생성합니다. - 이 파일을 편집하여 필요한 권한과 구성을 추가하십시오.
방법 2: Android Studio
- Unity에서 파일 > 빌드 설정 > 프로젝트 내보내기를 사용하여 프로젝트를 내보냅니다.
- Android Studio에서 내보낸 프로젝트를 엽니다.
-
Android Studio에서
AndroidManifest.xml파일을 직접 편집하십시오.
방법 1: Unity 사용자 지정 템플릿
- 다음 경로로 이동합니다. 파일 > 빌드 설정 > 플레이어 설정 > 게시 설정.
- " Publishing Settings " 섹션에서 "Custom Gradle Template"을 활성화합니다.
-
Unity는 Assets/Plugins/Android/mainTemplate.gradle 경로에
mainTemplate.gradle파일을 생성합니다. - 이 파일에 사용자 지정 Gradle 구성을 추가합니다.
방법 2: Android Studio
- Unity에서 프로젝트를 내보냅니다.
- Android Studio에서 프로젝트를 엽니다.
-
앱의 `
build.gradle` 파일을 직접 편집하세요.
Unity에서 Android 앱을 빌드할 때, 동일한 전달 의존성을 포함하는 여러 SDK로 인해 "중복 클래스" 오류가 발생할 수 있습니다. 이는 AppLovin SDK와 Singular SDK를 모두 사용할 때 Android Vending Licensing 라이브러리에서 흔히 발생합니다.
오류 예시:
Duplicate class com.android.vending.licensing.ILicensingService found in modules
applovin-sdk-13.5.0.aar -> jetified-applovin-sdk-13.5.0-runtime (com.applovin:applovin-sdk:13.5.0)
and singular_sdk-12.11.0.aar -> jetified-singular_sdk-12.11.0-runtime (com.singular.sdk:singular_sdk:12.11.0)
해결 방법 1: 외부 종속성 관리자(EDM4U) 사용
프로젝트에서 Unity용 External Dependency Manager (권장) 를 사용하는 경우, Dependencies XML 파일에 제외 규칙을 추가하십시오.
-
Unity 프로젝트 내의
*Dependencies.xml파일을 찾으십시오(일반적으로Assets/Editor또는 이와 유사한 위치에 있음). - SDK 종속성 중 하나에 제외 규칙을 추가합니다:
<dependencies>
<androidPackages>
<androidPackage spec="com.applovin:applovin-sdk:13.5.0">
<androidSdkPackageIds>
<exclude group="com.android.vending" module="licensing"/>
</androidSdkPackageIds>
</androidPackage>
<androidPackage spec="com.singular.sdk:singular_sdk:12.11.0" />
</androidPackages>
</dependencies>
참고: 이 방법은 Gradle 템플릿을 수정하는 것보다 더 영구적입니다. Android Resolver가 해결 과정에서 사용자 정의 템플릿 변경 사항을 덮어쓸 수 있기 때문입니다.
해결 방법 2: 사용자 지정 Gradle 템플릿 사용
EDM4U를 사용하지 않는 경우, Gradle 구성 파일에서 직접 제외 규칙을 적용하십시오.
- 다음 경로로 이동합니다: 파일 > 빌드 설정 > 플레이어 설정 > 게시 설정.
- "사용자 지정 메인 Gradle 템플릿" 또는 "사용자 지정 런처 Gradle 템플릿"을 활성화합니다.
-
Assets/Plugins/Android/mainTemplate.gradle(또는launcherTemplate.gradle) 파일을 엽니다. - dependencies 블록에 다음 제외 규칙을 추가하세요:
dependencies {
implementation('com.applovin:applovin-sdk:13.5.0') {
exclude group: 'com.android.vending', module: 'licensing'
}
implementation 'com.singular.sdk:singular_sdk:12.11.0'
}
대안: 다음 코드를 dependencies 블록 뒤에 추가하여 전역 제외 규칙을 적용하세요:
configurations.all {
exclude group: 'com.android.vending', module: 'licensing'
}
해결 확인
- 제외 규칙을 적용한 후, Library/Bee 및 Temp 폴더를 삭제하여 프로젝트를 정리하십시오.
- Unity에서 Android 프로젝트를 다시 빌드하십시오.
- 빌드 출력에서 중복 클래스 오류가 더 이상 나타나지 않는지 확인하십시오.
이 방법이 작동하는 이유: 두 SDK 모두 동일한 Android 라이선싱 라이브러리를 전이적 종속성으로 포함하고 있습니다. 이 제외 설정은 Gradle에 하나의 복사본만 사용하도록 지시하여 충돌을 해결합니다.
프로젝트에서 코드 난독화를 위해 ProGuard를 사용하는 경우,
다음과 같은
keep 규칙을 proguard-unity.txt 파일에 추가하여
Singular SDK가 제거되지 않도록
방지하십시오:
-keep class com.singular.sdk.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep public class com.singular.unitybridge.** { *; }
iOS 구성 팁
올바른 출처 표시, 딥 링크 및 테스트 기능을 활성화하려면 iOS 전용 설정을 구성하십시오.
Unity 프로젝트를 iOS용으로 빌드한 후, Xcode에서 빌드하기 전에 CocoaPods 종속성을 업데이트하여 최신 SDK 버전을 사용하고 있는지 확인하십시오.
cd /path/to/your/ios/project
pod repo update
pod update
연동 테스트를 위해 IDFV(Identifier for Vendor)를 로깅하여 Singular SDK 콘솔에 테스트 기기를 빠르게 추가하세요.
IDFV 로깅 추가
- Unity에서 빌드한 후 Xcode 프로젝트를 엽니다.
- Classes > UnityAppController.mm로 이동합니다.
-
applicationDidBecomeActive메서드를 찾습니다. - IDFV를 로깅하기 위해 다음 코드를 추가하세요:
// Log IDFV for testing
NSLog(@"Singular === IDFV: %@", [[[UIDevice currentDevice] identifierForVendor] UUIDString]);
- Xcode에서 앱을 빌드하고 실행합니다.
- Xcode 콘솔 로그에서 IDFV 출력값을 확인하세요.
- IDFV를 복사하여 Singular SDK 콘솔에 테스트 기기로 추가하세요.
Xcode 프로젝트에서 연관 도메인을 구성하여 딥 링크용 유니버설 링크를 활성화하세요.
딥 링크 설정 단계
- 연관 도메인 추가: Xcode에서 앱 타깃의 '서명 및 기능(Signing & Capabilities)' 탭으로 이동합니다.
- 기능 활성화: [+] Capability를 클릭하고 "Associated Domains"를 추가합니다.
-
도메인 추가: Singular 추적
도메인을
applinks:yourdomain.sng.link형식으로 추가합니다. - 팀 ID 구성: Singular 대시보드에서 앱 설정으로 이동하여 Apple 팀 ID를 추가합니다. 이를 통해 Singular는 유니버설 링크에 필요한 Apple App Site Association(AASA) 파일을 생성하고 호스팅할 수 있습니다.
중요: 관련 도메인과 팀 ID가 올바르게 구성되지 않으면 유니버설 링크가 작동하지 않으며 사용자는 Singular 추적 링크를 통해 앱을 열 수 없습니다.
UnityAppController를 등록하는 다른 SDK(예: Firebase, Adjust, AppsFlyer)를 사용 중인 경우, Singular가 제대로 초기화되지 못하게 하는 충돌이 발생할 수 있습니다. Unity에서는 한 번에 하나의 클래스만 UnityAppController로 등록할 수 있습니다.
이 충돌을 해결하려면:
-
Xcode 프로젝트에서
SingularSwizzledAppController.m파일을 열어주세요. - 이 파일의 모든 코드 주석을 해제합니다.
-
SingularAppDelegate.m파일을 열고 다음 줄이 주석 처리되어 있지 않은지 확인하십시오:IMPL_APP_CONTROLLER_SUBCLASS(SingularAppDelegate)
이렇게 하면 Singular가 UnityAppController를 서브클래싱하는 대신 메서드 스위즐링을 사용하여 다른 SDK와 함께 작동할 수 있습니다.
SDK 연동
SingularSDK GameObject 생성
Singular SDK가 작동하려면 Unity 씬 계층 구조에 GameObject가 필요합니다. 제공된 프리팹을 사용하거나 직접 생성하여 이 GameObject를 추가할 수 있습니다.
씬에 프리팹 추가
- 프로젝트 패널에서 Packages > Singular > SingularSDK > Prefabs로 이동합니다.
- SingularSDKObject 프리팹을 Hierarchy 패널로 드래그합니다.
- 이제 인스펙터에서 프리팹을 설정할 준비가 되었습니다.
GameObject 수동 생성
- Hierarchy 패널에서 마우스 오른쪽 버튼을 클릭하고 'Create Empty'를 선택합니다.
-
GameObject의 이름을 '
SingularSDKObject'로 지정합니다(정확한 이름이어야 함). - GameObject를 선택한 상태에서 Inspector 패널로 이동합니다.
- 'Add Component'를 클릭합니다.
- "Singular" 를 검색하여 Singular SDK Script 컴포넌트를 선택합니다.
중요: SDK가
제대로
작동하려면 GameObject의 이름이
정확히 SingularSDKObject 이어야 합니다.
SDK 설정 구성
Unity 인스펙터를 통해 SDK 자격 증명 및 초기화 설정을 구성하십시오. SDK가 Singular 서버와 통신하려면 API 키와 시크릿이 필요합니다.
API 자격 증명 추가
- SingularSDKObject 선택: 히어러키에서 SingularSDKObject를 클릭합니다.
- 인증 정보 찾기: Singular계정에 로그인한 후 개발자 도구 > SDK 연동 > SDK 키로 이동합니다.
- 키 복사: SDK 키 와 SDK 시크릿을 복사합니다.
- 인스펙터에 붙여넣기: Unity의 인스펙터 패널에서 인증 정보를 Singular API Key 및 Singular API Secret 필드에 붙여넣으세요.
중요: Singular Reporting API 키를 사용하지 마십시오. SDK 연동 페이지에서 제공하는 SDK 전용 API 키와 시크릿만 사용하십시오. 잘못된 자격 증명을 사용하면 데이터가 Singular로 전송되지 않습니다.
연동 확인: 구성이 완료된 후, Singular SDK 콘솔을사용하여 구현을 테스트하여 이벤트가 올바르게 추적되는지 확인하십시오.
기본 인스펙터 설정
SingularSDKObject는 합리적인 기본값을 제공합니다. 이러한 설정 을 이해하면 앱의 요구 사항에 맞게 SDK 동작을 사용자 지정하는 데 도움이 됩니다.
- Awake 시 초기화: 기본적으로 활성화되어 있습니다. GameObject가 깨어날 때 SDK가 자동으로 초기화됩니다. 개인정보 동의 또는 기타 요구 사항으로 인해 초기화를 지연해야 하는 경우 이 옵션을 비활성화하십시오.
- SKAN 활성화: 기본적으로 활성화되어 있습니다(iOS 전용). Managed Mode에서 SKAdNetwork 어트리뷰션을 활성화합니다. 이 모드에서는 Singular가 사용자가 설정한 전환 모델을 기반으로 전환 값을 자동으로 업데이트합니다.
- 추적 권한 승인 대기: 0(비활성화) 으로 설정합니다. 앱에서 iOS 앱 추적 투명성 (ATT) 프롬프트가 표시되는 경우, 이 값을 300초로 설정하십시오. 이렇게 하면 사용자가 ATT 프롬프트에 응답할 때까지 SDK 세션이 지연되어, 동의가 승인될 경우 IDFA를 캡처할 수 있도록 보장합니다. ATT를 사용하지 않는 경우 0으로 두십시오.
- 로깅 활성화: 기본적으로 활성화되어 있습니다. 연동 및 문제 해결을 돕기 위해 SDK 디버그 로그를 출력합니다. 실행 환경 빌드에서는 비활성화해야 합니다. '로그 수준' 설정(아래 참조)과 연동됩니다.
-
로그 수준: 기본적으로 3(정보)으로 설정되어 있습니다.
로그의 상세 수준을 제어합니다. 숫자가 낮을수록 더 상세한
로그가 생성됩니다:
// Based on Android Logger log levels public enum LogLevel { Verbose = 2, // Most verbose Debug = 3, Info = 4, // Default Warn = 5, Error = 6, Assert = 7 // Least verbose }참고: 상세 로그는 주로 Android에서 사용할 수 있습니다.
- DDL 타임아웃(초): 0으로 설정(60초 기본값 사용). SDK가 서버로부터 지연된 딥 링크 데이터를 기다리는 시간을 결정합니다. 지연된 딥 링크가 발견되지 않으면 서버는 이 타임아웃 후 검색을 중단합니다.
- 세션 타임아웃(초): 0으로 설정(기본값은 60초 임). 앱이 백그라운드로 전환된 후 포그라운드로 복귀할 때 SDK가 새 세션을 생성하기까지의 대기 시간을 정의합니다.
- 숏링크 해결 타임아웃: 0으로 설정 (기본값은 10초). 숏링크 해결을 기다리는 최대 시간입니다. 숏링크를 해결할 수 없는 경우 긴 대기 시간을 방지하여 사용자 경험을 보호합니다.
추가 구성 옵션
2025년 6월 18일 기준: Meta의 Advanced Mobile Measurement(AMM) 도입으로 인해 Meta 설치 리퍼러 구현이 더 이상 필요하지 않습니다. AMM 보고가 활성화된 경우, Meta 설치 리퍼러를 구성할 필요가 없습니다.
기존 Meta 설치 리퍼러 어트리뷰션 방식을 지원해야 하는 경우, SingularSDKObject 구성에 Facebook 앱 ID를 추가하십시오.
구성 단계
- 씬(scene) 계층 구조에서 SingularSDKObject를 선택합니다.
- 인스펙터 패널에서 "Facebook App ID" 필드를 찾습니다.
- Facebook 앱 ID를 입력합니다(Facebook 개발자 콘솔에서 확인할 수 있습니다).
추가 자료:
SDK 초기화
개인정보 보호 규정 준수: Singular SDK를 구현할 때는 GDPR, CCPA, COPPA 등을 포함하여 운영 지역의 개인정보 보호법을 준수해야 합니다. 자세한 내용은 SDK 옵트인 및 옵트아웃 관행을 참조하십시오.
앱이 실행될 때마다 Singular SDK를 초기화하십시오. SDK 초기화는 모든 Singular 어트리뷰션 기능에 필수적이며, 사용자 유지율 지표를 계산하기 위한 새로운 세션을 생성합니다.
자동 초기화
기본적으로 SingularSDK.cs Script는 Unity의
Awake() 메서드를 통해 씬이 로드될 때 SDK를 자동으로 초기화합니다.
인스펙터에서 Initialize On Awake가
활성화되어 있다면 추가 코드가 필요하지 않습니다.
수동 초기화
특정 시점(예: 사용자 동의 획득 후)에 SDK를 초기화해야 하는 경우, 자동 초기화를 비활성화하고 초기화 메서드를 수동으로 호출하십시오.
수동 초기화 설정
- 씬 계층 구조에서 SingularSDKObject 를 선택합니다.
- 인스펙터 패널에서 'Initialize On Awake'의 체크를 해제합니다.
-
초기화할 준비가 되면 코드에서 `
SingularSDK.InitializeSingularSDK()`를 호출하십시오.
InitializeSingularSDK 메서드
자동 초기화가 비활성화된 경우 이 메서드를 사용하여 SDK를 수동으로 초기화하십시오. .
using UnityEngine;
using Singular;
public class GameInitializer : MonoBehaviour
{
void Start()
{
// Perform any required setup (e.g., consent management)
CheckUserConsent();
// Initialize Singular SDK after consent is obtained
// SDK Key and Secret are configured on the SingularSDKObject
SingularSDK.InitializeSingularSDK();
}
void CheckUserConsent()
{
// Your consent logic here
}
}
스레드 안전성: Singular Unity SDK 메서드는 항상 다른 Unity API 호출에 사용된 것과 동일한 스레드에서 호출하십시오. 이 SDK는 여러 스레드 간에 스레드 안전하지 않습니다.
고급 구성
Google Ads iOS 연동 전환 측정 필수 사항
앱에서 iOS 14.5 이상 사용자를 대상으로 하는 Google Ads 캠페인을 실행하는 경우, iOS 연동 전환 측정(ICM)을 지원하려면 추가 SDK 구성 단계가 필요합니다. 여기에는 다음이 포함됩니다:
- Google의 기기 내 측정(ODM) SDK 연동
- Singular iOS SDK v12.8.1 이상으로 업데이트(Unity의 경우 v5.5.0 이상, Flutter/Cordova의 경우 v1.8.0 이상, React Native의 경우 v3.9.0 이상)
-
SingularConfig에서 '-ObjC' 링커 플래그 추가 및 'enableOdmWithTimeoutInterval' 활성화
참고: ' enableOdmWithTimeoutInterval '을 활성화하면 SDK 초기화가 지연되고 딥 링크 콜백이 연기될 수 있습니다. 재작업을 방지하려면 초기 SDK 구현 단계에서 이 설정을 완료하십시오.
세션 타임아웃 구성
앱이 전경으로 돌아왔을 때 SDK가 새 세션을 생성하기 전까지 앱이 백그라운드에 머물 수 있는 시간을 사용자 지정합니다.
세션 타임아웃 구성
기본 세션 타임아웃은 60초입니다. 이 값을 변경하려면:
- 씬 계층 구조에서 SingularSDKObject 를 선택합니다.
- 인스펙터 패널에서 'Session Timeout Sec' 필드를 찾습니다.
- 원하는 타임아웃 값을 초 단위로 입력합니다(예: 2분인 경우 120).
- 기본값인 60초 타임아웃을 사용하려면 0으로 둡니다.
모범 사례: 세션 타임아웃을 설정할 때는 앱의 일반적인 사용 패턴을 고려하십시오. 짧은 세션이 빈번한 게임의 경우 타임아웃을 짧게 설정하는 것이 유리할 수 있으며, 생산성 앱의 경우 더 긴 타임아웃이 필요할 수 있습니다.
.unitypackage에서 UPM으로 업그레이드
기존의 Unity 설치 관리자( .unitypackage ) 설치
방식에서 최신 Unity 패키지 관리자(UPM) 방식으로 마이그레이션하는 경우, 다음의
중요한 업그레이드 단계를 따르십시오.
중요: UPM 패키지를 설치하기 전에 기존의 모든 Singular SDK 파일을 수동으로 제거해야 합니다. 이를 수행하지 않으면 충돌 및 빌드 오류가 발생합니다.
업그레이드 절차
Unity Package Manager를 통해 SDK를 설치하기 전에 다음 단계를 순서대로 완료하십시오:
1. 코드 파일 제거
프로젝트의 /Code
폴더(일반적으로 Assets/Singular/Code)로 이동하여
Singular와 관련된 모든 C# Script를 삭제하십시오.
2. Android 종속성 제거
/Plugins/Android 폴더로 이동하여 다음 Singular 파일을 제거합니다:
-
이름에 "singular"가 포함된 모든
.aar파일 이름에 "singular"가 포함된 모든 파일 -
이름에 "singular"가 포함된 모든
.jar파일 -
singular-sdk.aar -
install-referrer-*.aar -
singular-unitybridge.aar
3. iOS 종속성 제거
/Plug ins/iOS 로 이동하여 다음 Singular 파일을 제거하십시오:
-
이름이 "singular"로 시작하는 모든
.h헤더 파일 (예:SingularSDK.h) -
모든
.m구현 파일 (예:SingularUnityBridge.m) -
Singular.xcframework폴더
중요: Singular 전용 파일만 제거하십시오. 프로젝트가 의존할 수 있는 다른 플러그인 파일을 삭제하지 않도록 주의하십시오.
4. 정리 상태 확인
- 파일을 제거한 후 Unity를 완전히 종료하십시오.
- 프로젝트 디렉터리의 Library 폴더를 삭제하여 Unity가 애셋을 다시 불러오도록 강제하십시오.
- Unity 프로젝트를 다시 엽니다.
- Unity가 에셋 재임포트를 완료할 때까지 기다리십시오.
- UPM 설치를 진행하기 전에 컴파일 오류가 없는지 확인하십시오.
5. UPM 패키지 설치
이제 Unity Package Manager를 통해 Singular SDK를 설치할 준비가 되었습니다. 이 가이드 상단에 있는 UPM 설치지침을 따르십시오.