동영상 가이드 제공
이 동영상에서 연동 과정에 대한 상세한 안내를 확인하세요. 최상의 결과를 얻으려면 동영상과 아래 가이드를 함께 활용하세요.
사전 요구사항
이 연동을 진행하기 전에 Singular SDK 연동: 계획 및 사전 요구사항 의 단계를 완료하세요.
중요: 이러한 사전 요구사항 단계는 모든 Singular SDK 연동에 필요합니다.
설치
설치 방법
참고: Android Studio는 이제 새 프로젝트에 대해 기본적으로 Kotlin DSL (build.gradle.kts)을 사용합니다. 아래의 모든 코드 예제는 Kotlin DSL (권장) 과 Groovy DSL 형식을 모두 보여줍니다.
방법 1: Gradle (권장)
SDK 저장소 추가
프로젝트의 의존성 관리에서 Singular Maven 저장소를 구성하세요.
참고:
Gradle 7부터 Android는 프로젝트 또는 모듈 수준의
build.gradle
선언보다
settings.gradle
또는
settings.gradle.kts
에서 중앙 집중식 저장소 선언을 사용하는 것을 권장합니다.
Gradle 7+ 설정
settings 파일에 Singular SDK 저장소를 추가하세요:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url = uri("https://maven.singular.net/")
}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url 'https://maven.singular.net/'
}
}
}
이전 Gradle 버전
이전 Gradle 버전의 경우, 프로젝트 수준의 빌드 파일에 저장소를 추가하세요:
repositories {
mavenCentral()
maven {
url = uri("https://maven.singular.net/")
}
}
repositories {
mavenCentral()
maven {
url 'https://maven.singular.net/'
}
}
Singular 라이브러리 의존성 추가
앱 모듈의 의존성에 Singular 라이브러리를 추가하세요.
dependencies {
implementation("com.singular.sdk:singular_sdk:12.14.0")
}
dependencies {
implementation 'com.singular.sdk:singular_sdk:12.14.0'
}
문제 해결: 중복 클래스 문제
여러 의존성이 동일한 라이브러리를 포함할 경우 중복 클래스 오류가 발생할 수 있습니다. 이는 이전 버전의 Google Play Services 라이브러리를 사용할 때 흔히 발생합니다.
일반적인 오류 예시:
Duplicate class com.google.android.gms.common.api.ResultCallback found in modules play-services-6.5.87.aar and play-services-basement-17.6.0.aar
해결 방법: 충돌하는 의존성 제외
중복 클래스 문제를 해결하려면, Singular SDK 또는 충돌을 일으키는 다른 의존성에서 충돌하는 전이 의존성을 제외하세요.
dependencies {
// Exclude specific Google Play Services modules from Singular SDK
implementation("com.singular.sdk:singular_sdk:12.14.0") {
exclude(group = "com.google.android.gms", module = "play-services")
}
// Add the specific Google Play Services libraries your app needs
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
implementation("com.google.android.gms:play-services-appset:16.0.2")
}
dependencies {
// Exclude specific Google Play Services modules from Singular SDK
implementation('com.singular.sdk:singular_sdk:12.14.0') {
exclude group: 'com.google.android.gms', module: 'play-services'
}
// Add the specific Google Play Services libraries your app needs
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0'
implementation 'com.google.android.gms:play-services-appset:16.0.2'
}
전역 제외 규칙
중복 클래스 충돌이 프로젝트 전반의 여러 의존성에 영향을 주는 경우, 전역 제외 규칙을 적용할 수 있습니다.
configurations.all {
exclude(group = "com.google.android.gms", module = "play-services")
}
configurations.all {
exclude group: 'com.google.android.gms', module: 'play-services'
}
의존성 해석 확인
제외 규칙을 적용한 후, 의존성 트리를 확인하여 충돌이 해결되었는지 검증하세요.
./gradlew app:dependencies --configuration debugRuntimeClasspath
이 명령어는 앱의 전체 의존성 트리를 표시하여 어떤 라이브러리가 포함되고 어떤 라이브러리가 제외되었는지 보여줍니다.
Samsung Galaxy Store 지원
앱이 Samsung Galaxy Store를 통해 배포되는 경우 Samsung Galaxy Store install referrer 의존성을 추가하세요.
dependencies {
implementation("store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:4.0.0")
}
dependencies {
implementation 'store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:4.0.0'
}
전이 의존성
Singular SDK에 대한 전이 의존성을 비활성화한 경우, 다음 필수 라이브러리를 앱 모듈의 의존성에 수동으로 추가하세요.
dependencies {
implementation("com.android.installreferrer:installreferrer:2.2")
implementation("com.google.android.gms:play-services-appset:16.0.2")
}
dependencies {
implementation 'com.android.installreferrer:installreferrer:2.2'
implementation 'com.google.android.gms:play-services-appset:16.0.2'
}
Google Play Services 의존성
앱이 Google Play Services API 17.0.0 이상을 구현하지 않는 경우, 다음 의존성을 추가하세요.
dependencies {
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
}
dependencies {
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0+'
}
대체 설치 방법
수동 다운로드
SDK AAR 파일을 다운로드하여 프로젝트에 수동으로 연동하세요.
- SDK 다운로드: 이 페이지 상단의 링크에서 SDK를 다운로드하세요
-
압축 해제 후 libs에 추가:
SDK 패키지의 압축을 풀고
Singular.aar을 Android 프로젝트의 libs 디렉터리에 추가하세요 -
libs 디렉터리 생성:
디렉터리가 없는 경우, 프로젝트 폴더에
libs라는 디렉터리를 생성하세요(일반적으로<project>/app/libs에 위치)
Maven 설치
프로젝트의
pom.xml
파일에 Singular Maven 저장소를 추가하세요.
<project ...>
<repositories>
<repository>
<id>singular.net</id>
<url>http://maven.singular.net/</url>
</repository>
</repositories>
</project>
의존성을 추가하세요:
<dependency>
<groupId>com.singular.sdk</groupId>
<artifactId>singular_sdk</artifactId>
<version>12.14.0</version>
</dependency>
Eclipse 설치
다음 단계를 따라 Eclipse를 사용하여 SDK를 연동하세요.
Eclipse AAR 플러그인을 사용할 수 있습니다: gradle-eclipse-aar-plugin
플러그인을 사용하지 않으려면 다음 단계를 따르세요:
-
AAR 압축 해제:
singular_sdk-12.14.0.aar의 압축을 해제하세요 -
JAR 파일 이름 변경:
classes.jar의 이름을singular_sdk-12.14.0.jar로 변경하세요(이것이 메인 SDK jar입니다) -
install referrer 추가:
com.android.installreferrer:installreferrer:2.2라이브러리를 프로젝트에 추가하세요 -
권한 복사:
AAR에 포함된
AndroidManifest.xml의BIND_GET_INSTALL_REFERRER_SERVICE권한을 사용자의AndroidManifest.xml에 복사하세요 -
라이선스 권한 복사:
AAR에 포함된
AndroidManifest.xml의CHECK_LICENSE권한을 사용자의AndroidManifest.xml에 복사하세요
ProGuard 설정
ProGuard 규칙
코드 난독화 문제를 방지하기 위해
proguard.config
파일에
다음 규칙을 추가하세요.
-keep class com.singular.sdk.** { *; }
-keep public class com.android.installreferrer.** { *; }
# Uncomment this line in case your are calling the 'revenue' function using the Google billing library
#-keep public class com.android.billingclient.** { *; }
필수 권한
AndroidManifest 설정
다음 권한을
AndroidManifest.xml
파일의
<manifest>
태그 아래에 추가하세요.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
Kids SDK
를 연동하는 경우
com.google.android.gms.permission.AD_ID
권한을 제외하세요.
Samsung Galaxy Store 쿼리
Samsung Galaxy Store의 install referrer를 지원하려면,
AndroidManifest.xml
에 다음을 추가하세요.
<queries>
<package android:name="com.sec.android.app.samsungapps" />
</queries>
SDK 연동
개인정보 보호 준수: Singular SDK를 구현할 때 비즈니스를 운영하는 지역에서 시행되는 GDPR, CCPA, COPPA를 포함한 개인정보 보호법을 준수하세요. 자세한 안내는 SDK 옵트인 및 옵트아웃 모범 사례 를 참조하세요.
Singular SDK 임포트
임포트 구문 추가
MainActivity 파일에서 Singular 라이브러리를 임포트하세요.
import com.singular.sdk.*
import com.singular.sdk.*;
SDK 초기화
초기화 함수 생성
세션 추적 및 어트리뷰션을 활성화하려면, private 메서드를 생성하고
MainActivity의
onCreate()
메서드에서 호출하여 앱이 실행될 때마다 Singular SDK를 초기화하세요.
다음 단계를 따르세요:
- 함수 추가: 초기화 메서드를 MainActivity 클래스(또는 진입점 Activity) 내부에 배치하세요
-
자격 증명 입력:
SDK KEY와SDK SECRET를 대시보드의 Singular SDK 키와 시크릿으로 교체하세요 - SingularConfig 업데이트: SDK를 초기화하기 전에 SingularConfig 객체를 생성하고 SDK 환경설정을 지정하세요(아래의 구성 옵션 참조)
-
함수 호출:
UI 설정 후 이벤트 로깅 전에
onCreate()에서initSingularSDK()를 호출하세요
기본 구현
기본 구성으로 초기화 메서드를 생성하세요.
private fun initSingularSDK() {
// Configure Singular with SDK key and secret
val config = SingularConfig("SDK KEY", "SDK SECRET")
try {
Singular.init(applicationContext, config)
Log.d("Singular", "SDK initialized successfully")
} catch (e: Exception) {
Log.e("Singular", "SDK initialization failed: ${e.message}")
}
}
private void initSingularSDK() {
// Configure Singular with SDK key and secret
SingularConfig config = new SingularConfig("SDK KEY", "SDK SECRET");
try {
Singular.init(getApplicationContext(), config);
Log.d("Singular", "SDK initialized successfully");
} catch (Exception e) {
Log.e("Singular", "SDK initialization failed: " + e.getMessage());
}
}
MainActivity onCreate에서 호출
MainActivity의
onCreate()
메서드에서 초기화 메서드를 호출하세요.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Singular SDK
initSingularSDK()
// Proceed with your app setup (e.g., UI initialization)
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize Singular SDK
initSingularSDK();
// Proceed with your app setup (e.g., UI initialization)
}
구현 가이드라인
SDK 초기화를 구현할 때 다음 주요 가이드라인을 따르세요.
- 배치: 적절한 세션 추적을 보장하기 위해 Application 클래스가 아닌 MainActivity에 초기화 메서드를 추가하세요
- 오류 처리: try-catch 블록은 앱 충돌 없이 초기화 오류(예: 잘못된 자격 증명)를 로깅합니다
- 딥링크: 딥링크(앱을 실행하는 URL)를 처리하려면, 추가 설정에 대한 딥링크 지원 문서를 참조하세요
-
META Install Referrer:
config.withFacebookAppId("FacebookAppID")를 추가하여 Meta Install Referrer 어트리뷰션 을 활성화하세요
2025년 6월 18일 기준 , Meta의 Advanced Mobile Measurement Reporting (AMM) 은 Meta Install Referrer 구현의 필요성을 제거합니다. AMM 리포팅이 활성화된 경우에는 Meta Install Referrer를 구현하지 않는 것이 권장됩니다.
프로 팁:
앱이 여러 진입점(예: 딥링크)을 지원하는 경우, 일관된 동작을
보장하기 위해 관련된 각 Activity의
onCreate()
에서
initSingularSDK()
가 호출되도록 하세요.
구성 옵션
SingularConfig 메서드
SingularConfig 객체를 사용하면 체이닝 가능한 구성 메서드를 통해 SDK 동작을 사용자 지정할 수 있습니다. 사용 가능한 모든 옵션은 아래 표를 참조하세요.
| 메서드 | 설명 |
|---|---|
.withFacebookAppId(String facebookAppID)
|
Facebook App ID를 구성합니다.
Meta Install Referrer 어트리뷰션
에 필요합니다.
앱의 Facebook App ID는 어디서 찾을 수 있나요?
를 참조하세요.
2025년 6월 18일 기준 , Meta의 Advanced Mobile Measurement Reporting (AMM) 은 Meta Install Referrer 구현의 필요성을 제거합니다. AMM 리포팅이 활성화된 경우에는 Meta Install Referrer를 구현하지 않는 것이 권장됩니다. |
.withCustomUserId(String customId)
|
사용자 ID를 Singular로 전송합니다 |
.withSingularLink(Intent intent, SingularLinkHandler handler)
.withSingularLink(Intent intent, SingularLinkHandler handler, long shortlinkTimeoutSec)
|
Singular Links로 딥링크를 활성화합니다. 1개 인수 오버로드는
기본적으로 10초의 단축 링크 해석 타임아웃을 사용하며, 이를 재정의하려면
3개 인수 오버로드를 사용하세요. 이 호출은 디퍼드 딥링크도 처리하므로 별도의
withDDLHandler
/
withDDLTimeoutInSec
구성은 더 이상 필요하지 않습니다.
|
.withOpenURI(URI openURI)
|
intent에서 URI를 가져옵니다(Singular에서 시작되지 않은 링크를 통해 앱이 열리는 경우 딥링크를 처리하기 위해) |
.withGlobalProperty(String key, String value, boolean overrideExisting)
|
전역 속성을 지정된 값으로 설정합니다. 키와 값은 앱에서 전송되는 모든 이벤트/세션과 함께 Singular로 전송됩니다 |
.withSessionTimeoutInSec(long timeout)
|
세션 타임아웃을 설정합니다 |
.withFCMDeviceToken(String token)
|
첫 세션에서 전송할 FCM 토큰을 설정합니다 |
.withLoggingEnabled()
|
로깅을 활성화합니다 |
.withLogLevel(int level)
|
로깅 수준을 구성합니다(기본값은 Log.ERROR) |