视频指南可用
观看此视频以获取集成过程的详细演示。 为获得最佳效果,请同时使用视频和下方的书面指南。
前提条件
在继续此集成之前,请完成 集成 Singular SDK:规划和前提条件 中的步骤。
重要: 这些前提步骤对于任何 Singular SDK 集成都是必需的。
安装
安装方法
注意: Android Studio 现在为新项目默认使用 Kotlin DSL (build.gradle.kts)。 下方所有代码示例同时展示 Kotlin DSL(推荐) 和 Groovy DSL 格式。
方法 1:Gradle(推荐)
添加 SDK 仓库
在项目的依赖管理中配置 Singular Maven 仓库。
注意:
从 Gradle 7 开始,Android 推荐在
settings.gradle
或
settings.gradle.kts
中使用集中式仓库声明,而不是在项目或模块级别的
build.gradle
中声明。
Gradle 7+ 配置
将 Singular SDK 仓库添加到您的 settings 文件:
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.13.0")
}
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)。
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")
}
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'
}
全局排除规则
如果类重复冲突影响了项目中的多个依赖项, 您可以应用全局排除规则。
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'
}
传递依赖项 (Transitive Dependencies)
如果您已禁用 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 目录:
如果不存在,请在您的项目文件夹中
(通常位于
<project>/app/libs)创建一个名为libs的目录
Maven 安装
将 Singular Maven 仓库添加到您项目的
pom.xml
文件中。
<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.13.0</version>
</dependency>
Eclipse 安装
按照以下步骤使用 Eclipse 集成 SDK。
您可以使用 Eclipse AAR 插件: gradle-eclipse-aar-plugin
如果您不想使用插件,请按照以下步骤操作:
-
解压 AAR:
解压
singular_sdk-12.13.0.aar -
重命名 JAR 文件:
将
classes.jar重命名为singular_sdk-12.13.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
添加 Import 语句
在您的 MainActivity 文件中导入 Singular 库。
import com.singular.sdk.*
import com.singular.sdk.*;
初始化 SDK
创建初始化函数
要启用会话追踪和归因,请创建一个 private 方法并在 MainActivity 的
onCreate()
方法中调用它,以便每次应用启动时初始化 Singular SDK。
请按照以下步骤操作:
- 添加函数: 将初始化方法放置在您的 MainActivity 类中(或任何入口 Activity 中)
-
插入凭证:
将
SDK KEY和SDK SECRET替换为您 dashboard 中的 Singular SDK key 和 secret - 更新 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 初始化时,请遵循以下关键指南。
- 位置: 将初始化方法添加到您的 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) |