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 推荐在 settings.gradle settings.gradle.kts 中使用集中式仓库声明,而不是在项目或模块级别的 build.gradle 中声明。

Gradle 7+ 配置

将 Singular SDK 仓库添加到您的 settings 文件:

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 安装

将 Singular Maven 仓库添加到您项目的 pom.xml 文件中。

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 替换为您 dashboard 中的 Singular SDK key 和 secret
  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 初始化时,请遵循以下关键指南。

  • 位置: 将初始化方法添加到您的 MainActivity 中,而不是 Application 类中, 以确保正确的会话追踪
  • 错误处理: 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。

Pro Tip: 如果您的应用支持多个入口点(例如,深度链接),请确保 initSingularSDK() 在每个相关 Activity 的 onCreate() 中被调用,以保证行为一致。


配置选项

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 启用深度链接。单参数重载默认使用 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 token
.withLoggingEnabled() 启用日志记录
.withLogLevel(int level) 配置日志记录级别(默认为 Log.ERROR)