Android SDK - 기본 연동

비디오 가이드 제공

연동 과정에 대한 자세한 안내를 보려면 이 비디오를 시청하세요. 최상의 결과를 얻으려면 비디오와 아래의 문서 가이드를 함께 사용하세요.


사전 요구사항

이 연동을 진행하기 전에 Singular SDK 연동: 계획 및 사전 요구사항 의 단계를 완료하세요.

중요: 이러한 사전 요구사항 단계는 모든 Singular SDK 연동에 필수입니다.


설치

설치 방법

참고: Android Studio는 이제 새 프로젝트에서 기본적으로 Kotlin DSL (build.gradle.kts)을 사용합니다. 아래의 모든 코드 예제는 Kotlin DSL (권장) Groovy DSL 형식을 모두 표시합니다.

방법 1: Gradle (권장)

방법 1: Gradle (권장)

SDK 저장소 추가

프로젝트의 의존성 관리에서 Singular Maven 저장소를 구성합니다.

참고: Gradle 7부터 Android는 프로젝트 또는 모듈 수준의 build.gradle 선언보다 settings.gradle 또는 settings.gradle.kts 에서 중앙 집중식 저장소 선언을 사용하는 것을 권장합니다.

Gradle 7+ 구성

settings 파일에 Singular SDK 저장소를 추가합니다:

settings.gradle.kts (Kotlin DSL - Recommended) settings.gradle (Groovy DSL)
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://maven.singular.net/")
        }
    }
}

이전 Gradle 버전

이전 Gradle 버전의 경우, 프로젝트 수준 빌드 파일에 저장소를 추가하세요:

build.gradle.kts (Kotlin DSL - Recommended) build.gradle (Groovy DSL)
repositories {
    mavenCentral()
    maven {
        url = uri("https://maven.singular.net/")
    }
}

Singular 라이브러리 의존성 추가

앱 모듈의 의존성에 Singular 라이브러리를 추가합니다.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
dependencies {
    implementation("com.singular.sdk:singular_sdk:12.13.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 또는 충돌을 일으키는 다른 의존성에서 충돌하는 전이 의존성(transitive dependency)을 제외합니다.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
dependencies {
    // Exclude specific Google Play Services modules from Singular SDK
    implementation("com.singular.sdk:singular_sdk:12.13.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")
}

전역 제외 규칙

중복 클래스 충돌이 프로젝트 전반의 여러 의존성에 영향을 미치는 경우, 전역 제외 규칙을 적용할 수 있습니다.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
configurations.all {
    exclude(group = "com.google.android.gms", module = "play-services")
}

의존성 해결 검증

제외 규칙을 적용한 후, 충돌이 해결되었는지 확인하기 위해 의존성 트리를 검증합니다.

Terminal Command
./gradlew app:dependencies --configuration debugRuntimeClasspath

이 명령은 앱의 전체 의존성 트리를 표시하여 어떤 라이브러리가 포함되어 있고 어떤 라이브러리가 제외되었는지를 보여줍니다.


Samsung Galaxy Store 지원

앱이 Samsung Galaxy Store를 통해 배포되는 경우 Samsung Galaxy Store install referrer 의존성을 추가합니다.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
dependencies {
    implementation("store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:4.0.0")
}

전이 의존성 (Transitive Dependencies)

Singular SDK의 전이 의존성을 비활성화한 경우, 앱 모듈의 의존성에 필요한 라이브러리를 수동으로 추가하세요.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
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 이상을 구현하지 않은 경우, 다음 의존성을 추가하세요.

app/build.gradle.kts (Kotlin DSL - Recommended) app/build.gradle (Groovy DSL)
dependencies {
    implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
}
방법 2: 수동 설치

대체 설치 방법

수동 다운로드

SDK AAR 파일을 다운로드하여 프로젝트에 수동으로 연동합니다.

  1. SDK 다운로드: 이 페이지 상단의 링크에서 SDK를 다운로드합니다
  2. 압축 해제 및 libs에 추가: SDK 패키지의 압축을 해제하고 Singular.aar 을 Android 프로젝트의 libs 디렉터리에 추가합니다
  3. libs 디렉터리 생성: 존재하지 않을 경우, 프로젝트 폴더(보통 <project>/app/libs )에 libs 디렉터리를 생성합니다
방법 3: Maven 설치

Maven 설치

프로젝트의 pom.xml 파일에 Singular Maven 저장소를 추가합니다.

pom.xml
<project ...>
    <repositories>
        <repository>
            <id>singular.net</id>
            <url>http://maven.singular.net/</url>
        </repository>
    </repositories>
</project>

의존성을 추가합니다:

pom.xml
<dependency>
    <groupId>com.singular.sdk</groupId>
    <artifactId>singular_sdk</artifactId>
    <version>12.13.0</version>
</dependency>
방법 4: Eclipse 설치

Eclipse 설치

다음 단계를 따라 Eclipse를 사용하여 SDK를 연동합니다.

Eclipse AAR 플러그인을 사용할 수 있습니다: gradle-eclipse-aar-plugin

플러그인을 사용하지 않으려면 다음 단계를 따르세요:

  1. AAR 압축 해제: singular_sdk-12.13.0.aar 의 압축을 해제합니다
  2. JAR 파일 이름 변경: classes.jar 의 이름을 singular_sdk-12.13.0.jar 로 변경합니다 (이것이 기본 SDK jar입니다)
  3. install referrer 추가: com.android.installreferrer:installreferrer:2.2 라이브러리를 프로젝트에 추가합니다
  4. 권한 복사: AAR에 포함된 AndroidManifest.xml BIND_GET_INSTALL_REFERRER_SERVICE 권한을 사용 중인 AndroidManifest.xml 에 복사합니다
  5. 라이선스 권한 복사: AAR에 포함된 AndroidManifest.xml CHECK_LICENSE 권한을 사용 중인 AndroidManifest.xml 에 복사합니다

ProGuard 구성

ProGuard 규칙

코드 난독화 문제를 방지하려면 proguard.config 파일에 다음 규칙을 추가합니다.

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> 태그 아래에 추가합니다.

AndroidManifest.xml
<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 에 다음을 추가하세요.

AndroidManifest.xml
<queries>
    <package android:name="com.sec.android.app.samsungapps" />
</queries>

SDK 연동

개인정보 보호 준수: Singular SDK를 구현할 때는 GDPR, CCPA, COPPA를 포함하여 비즈니스를 운영하는 지역에서 시행되는 개인정보 보호법을 준수하세요. 자세한 안내는 SDK 옵트인 및 옵트아웃 방안 을 참조하세요.

Singular SDK 임포트

Import 문 추가

MainActivity 파일에 Singular 라이브러리를 임포트합니다.

Kotlin Java
import com.singular.sdk.*

SDK 초기화

초기화 함수 생성

세션 트래킹과 어트리뷰션을 활성화하려면, private 메서드를 생성하고 MainActivity의 onCreate() 메서드에서 이를 호출하여 앱이 실행될 때마다 Singular SDK를 초기화하세요.

다음 단계를 따르세요:

  1. 함수 추가: 초기화 메서드를 MainActivity 클래스(또는 진입점 Activity)에 배치합니다
  2. 자격 증명 삽입: SDK KEY SDK SECRET 을 대시보드의 Singular SDK 키 및 시크릿으로 교체합니다
  3. SingularConfig 업데이트: SDK를 초기화하기 전에 SingularConfig 객체를 생성하고 SDK 환경설정을 지정합니다 (아래 구성 옵션 참조)
  4. 함수 호출: UI 설정 이후, 이벤트 로깅 이전에 onCreate() 에서 initSingularSDK() 를 호출합니다

기본 구현

기본 구성으로 초기화 메서드를 생성합니다.

Kotlin Java
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}")
    }
}

MainActivity의 onCreate에서 호출

MainActivity의 onCreate() 메서드에서 초기화 메서드를 호출합니다.

Kotlin Java
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)
}

구현 가이드라인

SDK 초기화를 구현할 때 다음 핵심 가이드라인을 따르세요.

  • 배치 위치: 올바른 세션 트래킹을 보장하기 위해 초기화 메서드를 Application 클래스가 아닌 MainActivity에 추가합니다
  • 오류 처리: try-catch 블록은 초기화 오류(예: 잘못된 자격 증명)를 앱 충돌 없이 로깅합니다
  • 딥링크: 딥링크(앱을 실행하는 URL)를 처리하려면 추가 설정 방법은 딥링크 지원 을 참조하세요
  • META Install Referrer: Meta Install Referrer 어트리뷰션 을 활성화하려면 config.withFacebookAppId("FacebookAppID") 을 추가합니다

2025년 6월 18일부로 , Meta의 Advanced Mobile Measurement Reporting (AMM) 은 Meta Install Referrer 구현의 필요성을 제거합니다. AMM 보고가 활성화되어 있는 경우 Meta Install Referrer를 구현하지 않는 것을 권장합니다.

Pro Tip: 앱이 여러 진입점(예: 딥링크)을 지원하는 경우, 일관된 동작을 보장하기 위해 각 관련 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로 딥링크를 활성화합니다. Singular 인자 오버로드는 기본적으로 10초 short link 해결 타임아웃을 사용합니다. 이를 재정의하려면 세 개 인자 오버로드를 사용하세요. 이 호출은 deferred deep link도 처리하므로, 별도의 withDDLHandler / withDDLTimeoutInSec 구성은 더 이상 필요하지 않습니다.
.withOpenURI(URI openURI) intent에서 URI를 가져옵니다 (Singular에서 시작되지 않은 링크를 통해 앱이 열릴 때 딥링크를 처리하기 위함)
.withGlobalProperty(String key, String value, boolean overrideExisting) 전역 속성에 주어진 값을 설정합니다. key와 value는 앱에서 전송되는 모든 이벤트/세션과 함께 Singular에 전송됩니다
.withSessionTimeoutInSec(long timeout) 세션 타임아웃을 설정합니다
.withFCMDeviceToken(String token) 첫 번째 세션에 전송할 FCM 토큰을 설정합니다
.withLoggingEnabled() 로깅을 활성화합니다
.withLogLevel(int level) 로깅 레벨을 구성합니다 (기본값은 Log.ERROR)