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+ 구성

설정 파일에 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.10.0")
}

문제 해결: 중복 클래스 문제

여러 종속성에 동일한 라이브러리가 포함된 경우 중복 클래스 오류가 발생할 수 있습니다. 이는 이전 버전을 사용할 때 Google Play 서비스 라이브러리에서 주로 발생합니다.

일반적인 오류 예시:

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에서 제외하세요.

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.10.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

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


삼성 갤럭시 스토어 지원

앱이 삼성 갤럭시 스토어를 통해 배포되는 경우 삼성 갤럭시 스토어 설치 리퍼러 종속성을 추가합니다.

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

전이 종속성

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.0")
}

구글 플레이 서비스 종속성

앱에서 Google Play 서비스 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. 압축을 풀고 라이브러리에 추가합니다: SDK 패키지의 압축을 풀고 Singular.aar 을 안드로이드 프로젝트의 라이브러리 디렉토리에 추가합니다.
  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.10.0</version>
</dependency>
방법 4: Eclipse 설치
#

Eclipse 설치

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

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

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

  1. AAR의 압축을 풉니다: singular_sdk-12.10.0.aar 압축을 풉니다.
  2. JAR 파일의 이름을 바꿉니다: classes.jar 의 이름을 singular_sdk-12.10.0.jar 으로 변경합니다(기본 SDK jar).
  3. 설치 리퍼러 추가: 프로젝트에 com.android.installreferrer:installreferrer:2.2라이브러리를 추가합니다.
  4. 권한 복사: AAR에 포함된 AndroidManifest.xml 에서 AndroidManifest.xml으로 BIND_GET_INSTALL_REFERRER_SERVICE 권한을 복사합니다.
  5. 라이선스 권한 복사: CHECK_LICENSE 권한을 AAR에 포함된 AndroidManifest.xml 에서 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.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" />

키즈 SDK를 연동하는 경우 com.google.android.gms.permission.AD_ID 권한을 제외하세요.


삼성 갤럭시 스토어 쿼리

삼성 갤럭시 스토어의 설치 리퍼러를 지원하려면 AndroidManifest.xml 에 다음을 추가하세요.

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

SDK 연동

개인정보 보호 규정 준수: Singular SDK를 구현할 때 GDPR, CCPA 및 COPPA를 포함하여 비즈니스를 운영하는 지역에서 제정된 개인정보 보호법을 준수해야 합니다. 지침은 SDK 옵트인 및 옵트아웃 사례를참조하세요.

Singular SDK 가져오기

가져오기 문 추가

메인 활동 파일에서 Singular 라이브러리를 가져옵니다.

KotlinJava
import com.singular.sdk.*

SDK 초기화

초기화 함수 생성

세션 추적 및 어트리뷰션을 활성화하려면 앱이 실행될 때마다 비공개 메서드를 생성하고 메인 액티비티의 onCreate() 메서드에서 호출하여 Singular SDK를 초기화하세요.

다음 단계를 따르세요:

  1. 함수를 추가합니다: 초기화 메서드를 메인 액티비티 클래스(또는 엔트리 포인트 액티비티) 안에 배치합니다.
  2. 자격 증명 삽입: SDK KEYSDK SECRET 을 대시보드에서 Singular SDK 키와 비밀번호로 바꿉니다.
  3. SingularConfig 업데이트: SDK를 초기화하기 전에 SingularConfig 객체를 생성하고 SDK 환경설정을 설정합니다(아래 구성 옵션 참조).
  4. 함수를 호출합니다: UI 설정 후 이벤트를 로깅하기 전에 onCreate() 에서 initSingularSDK() 을 호출합니다.

기본 구현

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

KotlinJava
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}")
    }
}

메인 액티비티에서 호출 onCreate

메인 액티비티의 onCreate() 메서드에서 초기화 메서드를 호출합니다.

KotlinJava
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 초기화를 구현할 때 다음 주요 지침을 따르세요.

  • 배치: 적절한 세션 추적을 위해 초기화 메서드를 애플리케이션 클래스가 아닌 메인 액티비티에 추가하세요.
  • 오류 처리: Try-Catch 블록은 앱 충돌 없이 초기화 오류(예: 유효하지 않은 자격 증명)를 기록합니다.
  • 딥 링크: 딥링크(앱을 실행하는 URL)를 처리하려면 확장 설정을 위한 딥링크 지원을참조하십시오.
  • 메타 인스톨 리퍼러: 메타 인스톨 리퍼러 어트리뷰션을활성화하려면 config.withFacebookAppId("FacebookAppID") 을 추가하세요.

2025년 6월 18일부터 메타의 고급 모바일 측정 보고(AMM)를 사용하면메타 인스톨 리퍼러를 구현할 필요가 없습니다. AMM 보고가 활성화된 경우 메타 인스톨 리퍼러를 구현하지 않는 것이 좋습니다.

프로 팁: 앱이 여러 진입점(예: 딥링크)을 지원하는 경우 일관된 동작을 보장하기 위해 각 관련 활동의 onCreate() 에서 initSingularSDK() 을 호출해야 합니다.


구성 옵션

SingularConfig 메서드

SingularConfig 객체를 사용하면 체인 가능한 구성 메서드를 사용하여 SDK 동작을 사용자 지정할 수 있습니다. 사용 가능한 모든 옵션은 아래 표를 참조하세요.

메서드 설명
.withFacebookAppId(String facebookAppID) 페이스북 앱 ID를 구성합니다. 메타 인스톨 리퍼러 어트리뷰션에 필요합니다. 앱의 Facebook 앱 ID는 어디에서 찾을 수있나요?

2025년 6월 18일부터 메타의 고급 모바일 측정 보고(AMM)를사용하면 메타 인스톨 리퍼러를 구현할 필요가 없습니다. AMM 보고가 활성화된 경우 메타 인스톨 리퍼러를 구현하지 않는 것이 좋습니다.

.withCustomUserId(String customId) Singular에 사용자 ID 보내기
.withSingularLink(getIntent(), SingularLinkHandler handler) Singular 링크로 딥링킹 사용
.withDDLTimeoutInSec(long timeout) 앱이 처음 열렸을 때 Singular가 디퍼드 딥링크를 검색하는 기간을 설정합니다.
.withOpenURI(URI openURI) 인텐트에서 URI를 가져옵니다(앱이 Singular에서 시작되지 않은 링크를 통해 열린 경우 딥링크를 처리하기 위해).
.withGlobalProperty(String key, String value, boolean overrideExisting) 글로벌 프로퍼티를 지정된 값으로 설정합니다. 키와 값은 앱에서 전송된 모든 이벤트/세션과 함께 Singular로 전송됩니다.
.withSessionTimeoutInSec(long timeout) 세션 타임아웃 설정
.withFCMDeviceToken(String token) 첫 번째 세션에서 전송할 FCM 토큰을 설정합니다.
.withLoggingEnabled() 로깅 활성화
.withLogLevel(int level) 로깅 수준을 구성합니다(기본값은 Log.ERROR).