前提条件
在安装 Singular Unity SDK 之前,请完成以下前提条件步骤,以确保集成过程顺利进行。
必需的前提条件:
- 完成规划步骤: 请按照 集成 Singular SDK:规划与前提条件 中的指南操作。这些步骤对于任何 Singular SDK 集成都是必需的。
- 检查依赖管理器: 请确认您的项目是否使用 Google EDM4U (External Dependency Manager for Unity)。 了解有关 Google EDM4U 的更多信息 。
-
从 .unitypackage 升级?
如果您正在从旧版
.unitypackage迁移到新的UPM包,请在继续之前 阅读升级说明 。
安装
通过 Unity Package Manager (UPM) 安装
Singular Unity SDK 通过 Unity Package Manager 使用 Git URL 进行安装。请按照以下步骤将 SDK 添加到您的项目中。
安装步骤
- 打开 Package Manager: 在 Unity 中,导航至 Window > Package Manager 。
- 从 Git 添加包: 点击左上角的 [+] 按钮,然后选择 "Add package from git URL" 。
-
输入 Git URL:
-
标准版 SDK:
输入
https://github.com/singular-labs/Singular-Unity-SDK.git -
儿童版 SDK:
输入
https://github.com/singular-labs/Singular-Unity-SDK.git#kids
-
标准版 SDK:
输入
- 完成安装: 点击 "Add" 以安装 SDK 包。
未使用 Google EDM4U? 如果您的项目不使用 External Dependency Manager,则必须手动下载并添加原生依赖项。
手动安装依赖项
-
下载依赖项:
从 Singular 的 S3 存储桶下载相应的
Plugins.zip文件:-
标准版 SDK (v5.8.0):
下载标准版 SDK 插件 -
儿童版 SDK (v5.6.0):
下载儿童版 SDK 插件
-
标准版 SDK (v5.8.0):
- 解压到 Assets: 解压下载的文件,并将其移动到 Unity 项目中的 Assets > Plugins 。
-
配置 iOS 框架:
导航至
Assets > Plugins > iOS
并选择
Singular.xcframework。 - 嵌入二进制文件: 在 Inspector 面板中,勾选 "Add to Embedded Binaries" 选项。
Android 配置提示
请配置您的 Android 构建设置,以确保 SDK 正常运行。Unity 提供了多种方式来自定义 Android 清单文件和 Gradle 文件。
您可以使用以下两种方法之一修改 AndroidManifest:
方法 1:Unity 自定义清单
- 导航至 File > Build Settings > Player Settings > Publishing Settings 。
- 在 Publishing Settings 部分下启用 "Custom Main Manifest" 。
-
Unity 会在
Assets/Plugins/Android/AndroidManifest.xml
处生成一个默认的
AndroidManifest.xml文件。 - 编辑此文件以添加所需的权限和配置。
方法 2:Android Studio
- 使用 File > Build Settings > Export Project 从 Unity 导出您的项目。
- 在 Android Studio 中打开导出的项目。
-
直接在 Android Studio 中编辑
AndroidManifest.xml文件。
方法 1:Unity 自定义模板
- 导航至 File > Build Settings > Player Settings > Publishing Settings 。
- 在 Publishing Settings 部分下启用 "Custom Gradle Template" 。
-
Unity 会在
Assets/Plugins/Android/mainTemplate.gradle
处生成一个
mainTemplate.gradle文件。 - 将您的自定义 Gradle 配置添加到此文件中。
方法 2:Android Studio
- 从 Unity 导出您的项目。
- 在 Android Studio 中打开项目。
-
直接编辑应用的
build.gradle文件。
在 Unity 中构建 Android 应用时,您可能会遇到由多个 SDK 引入相同的传递依赖项而导致的 "Duplicate class"(重复类)错误。这种情况通常在同时使用 AppLovin SDK 和 Singular SDK 时,因 Android Vending Licensing 库而发生。
错误示例:
Duplicate class com.android.vending.licensing.ILicensingService found in modules
applovin-sdk-13.5.0.aar -> jetified-applovin-sdk-13.5.0-runtime (com.applovin:applovin-sdk:13.5.0)
and singular_sdk-12.11.0.aar -> jetified-singular_sdk-12.11.0-runtime (com.singular.sdk:singular_sdk:12.11.0)
解决方案 1:使用 External Dependency Manager (EDM4U)
如果您的项目使用 External Dependency Manager for Unity (推荐),请向您的 Dependencies XML 文件添加排除规则。
-
在您的 Unity 项目中找到
*Dependencies.xml文件(通常位于Assets/Editor或类似位置)。 - 向其中一个 SDK 依赖项添加排除规则:
<dependencies>
<androidPackages>
<androidPackage spec="com.applovin:applovin-sdk:13.5.0">
<androidSdkPackageIds>
<exclude group="com.android.vending" module="licensing"/>
</androidSdkPackageIds>
</androidPackage>
<androidPackage spec="com.singular.sdk:singular_sdk:12.11.0" />
</androidPackages>
</dependencies>
注意: 与修改 Gradle 模板相比,此方法更持久,因为 Android Resolver 在解析过程中可能会覆盖自定义模板的更改。
解决方案 2:使用自定义 Gradle 模板
如果您未使用 EDM4U,请直接在您的 Gradle 配置文件中应用排除规则。
- 导航至 File > Build Settings > Player Settings > Publishing Settings 。
- 启用 "Custom Main Gradle Template" 或 "Custom Launcher Gradle Template" 。
-
打开
Assets/Plugins/Android/mainTemplate.gradle(或launcherTemplate.gradle)。 - 将排除规则添加到您的 dependencies 块中:
dependencies {
implementation('com.applovin:applovin-sdk:13.5.0') {
exclude group: 'com.android.vending', module: 'licensing'
}
implementation 'com.singular.sdk:singular_sdk:12.11.0'
}
替代方案: 通过在 dependencies 块之后添加以下内容来应用全局排除:
configurations.all {
exclude group: 'com.android.vending', module: 'licensing'
}
验证解决结果
- 应用排除规则后,通过删除 Library/Bee 和 Temp 文件夹来清理您的项目。
- 在 Unity 中重新构建您的 Android 项目。
- 确认构建输出中不再出现重复类错误。
工作原理: 两个 SDK 都将相同的 Android licensing 库作为传递依赖项捆绑在一起。排除规则告诉 Gradle 仅使用一个副本,从而解决冲突。
如果您的项目使用 ProGuard 进行代码混淆,请将以下 keep 规则添加到您的
proguard-unity.txt
文件中,以防止 Singular SDK 被剥离:
-keep class com.singular.sdk.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep public class com.singular.unitybridge.** { *; }
iOS 配置提示
配置 iOS 特定的设置,以启用正确的归因、深度链接和测试功能。
在为 iOS 构建 Unity 项目之后、在 Xcode 中构建之前,请更新您的 CocoaPods 依赖项,以确保您拥有最新的 SDK 版本。
cd /path/to/your/ios/project
pod repo update
pod update
在测试您的集成时,记录 IDFV (Identifier for Vendor),以便快速将您的测试设备添加到 Singular SDK Console 中。
添加 IDFV 日志记录
- 在从 Unity 构建后打开您的 Xcode 项目。
- 导航至 Classes > UnityAppController.mm 。
-
找到
applicationDidBecomeActive方法。 - 添加以下代码以记录 IDFV:
// Log IDFV for testing
NSLog(@"Singular === IDFV: %@", [[[UIDevice currentDevice] identifierForVendor] UUIDString]);
- 在 Xcode 中构建并运行您的应用。
- 检查 Xcode 控制台日志以获取 IDFV 输出。
- 复制 IDFV 并将其作为测试设备添加到 Singular SDK Console 中。
通过在您的 Xcode 项目中配置 Associated Domains,启用用于深度链接的 Universal Links。
深度链接设置步骤
- 添加 Associated Domain: 在 Xcode 中,导航至您应用目标的 Signing & Capabilities 选项卡。
- 启用功能: 点击 [+] Capability 并添加 "Associated Domains" 。
-
添加域名:
以以下格式添加您的 Singular 追踪域名:
applinks:yourdomain.sng.link - 配置 Team ID: 在 Singular 仪表板中,导航至您应用的设置并添加您的 Apple Team ID。这样 Singular 即可生成并托管 Universal Links 所需的 Apple App Site Association (AASA) 文件。
重要: 如果没有正确配置 Associated Domains 和 Team ID,Universal Links 将无法工作,用户也将无法从 Singular 追踪链接打开您的应用。
如果您正在使用其他注册 UnityAppController 的 SDK(例如 Firebase、Adjust 或 AppsFlyer),则可能会遇到导致 Singular 无法正常初始化的冲突。在 Unity 中,同一时间只能有一个类注册为 UnityAppController。
要解决此冲突:
-
打开
您 Xcode 项目中的
SingularSwizzledAppController.m文件。 - 取消注释此文件中的所有代码。
-
打开
SingularAppDelegate.m并验证以下行未被注释掉:IMPL_APP_CONTROLLER_SUBCLASS(SingularAppDelegate)
这样 Singular 即可通过方法 swizzling 而非子类化 UnityAppController 的方式,与其他 SDK 协同工作。
集成 SDK
创建 SingularSDK GameObject
Singular SDK 需要在您的 Unity 场景层级中有一个 GameObject 才能运行。您可以使用提供的预制件 (prefab) 或手动创建来添加此 GameObject。
将预制件添加到场景
- 在 Project 面板中,导航至 Packages > Singular > SingularSDK > Prefabs 。
- 将 SingularSDKObject 预制件拖入您的 Hierarchy 面板中。
- 现在该预制件已可在 Inspector 中进行配置。
手动创建 GameObject
- 在 Hierarchy 面板中,右键单击并选择 Create Empty 。
-
将该 GameObject 命名为
SingularSDKObject(必须使用此确切名称)。 - 在选中该 GameObject 的情况下,导航至 Inspector 面板。
- 点击 Add Component 。
- 搜索 "Singular" 并选择 Singular SDK 脚本组件。
关键:
该 GameObject 的名称必须确切为
SingularSDKObject
,SDK 才能正常运行。
配置 SDK 设置
通过 Unity Inspector 配置您的 SDK 凭据和初始化设置。SDK 需要您的 API Key 和 Secret 才能与 Singular 的服务器通信。
添加 API 凭据
- 选择 SingularSDKObject: 在您的 Hierarchy 中点击 SingularSDKObject。
- 找到凭据: 登录您的 Singular 账户 并导航至 Developer Tools > SDK Integration > SDK Keys 。
- 复制密钥: 复制您的 SDK Key 和 SDK Secret 。
- 粘贴到 Inspector: 在 Unity 的 Inspector 面板中,将凭据粘贴到 Singular API Key 和 Singular API Secret 字段中。
关键: 请勿使用 Singular Reporting API Key。请仅使用 SDK Integration 页面中专用于 SDK 的 API Key 和 Secret。使用错误的凭据会导致数据无法发送到 Singular。
验证您的集成: 配置完成后,使用 Singular SDK Console 测试您的实现,以确保事件被正确跟踪。
默认 Inspector 设置
SingularSDKObject 附带合理的默认值。了解这些设置有助于您根据应用的需求自定义 SDK 的行为。
- Initialize On Awake: 默认启用。当 GameObject 唤醒时,SDK 会自动初始化。如果您需要为隐私同意或其他要求而延迟初始化,请禁用此选项。
- SKAN Enabled: 默认启用(仅限 iOS)。在托管模式 (Managed Mode) 下启用 SKAdNetwork 归因,Singular 会根据您配置的转化模型自动更新转化值。
- Wait For Tracking Authorization: 设置为 0(禁用)。如果您的应用显示 iOS App Tracking Transparency (ATT) 提示,请将其设置为 300 秒。这会将 SDK 会话延迟到用户响应 ATT 提示之后,确保在授予同意时能够捕获 IDFA。如果不使用 ATT,请保持为 0。
- Enable Logging: 默认启用。输出 SDK 调试日志,以帮助集成和故障排除。在生产版本中应禁用此选项。它与 Log Level 设置(见下文)配合使用。
-
Log Level:
默认设置为 3 (Info)。控制日志记录的详细程度。数字越小,日志越详细:
// Based on Android Logger log levels public enum LogLevel { Verbose = 2, // Most verbose Debug = 3, Info = 4, // Default Warn = 5, Error = 6, Assert = 7 // Least verbose }注意: 详细日志主要在 Android 上可用。
- DDL Timeout Sec: 设置为 0(使用 60 秒的默认值)。决定 SDK 等待服务器返回延迟深度链接数据的时长。如果在此超时后仍未找到延迟深度链接,服务器将停止搜索。
- Session Timeout Sec: 设置为 0(使用 60 秒的默认值)。定义应用在后台运行多长时间后,SDK 会在返回前台时创建新会话。
- Shortlink Resolve Timeout: 设置为 0(使用 10 秒的默认值)。等待短链接解析的最长时间。通过防止在短链接无法解析时长时间等待,保护用户体验。
其他配置选项
自 2025 年 6 月 18 日起: Meta 的 Advanced Mobile Measurement (AMM) 消除了实现 Meta Install Referrer 的需要。如果已启用 AMM 报告,则无需配置 Meta Install Referrer。
如果您需要支持旧版 Meta Install Referrer 归因方法,请将您的 Facebook App ID 添加到 SingularSDKObject 配置中。
配置步骤
- 在您的场景层级中选择 SingularSDKObject 。
- 在 Inspector 面板中,找到 "Facebook App ID" 字段。
- 输入您的 Facebook App ID(可在您的 Facebook Developer Console 中找到)。
其他资源:
初始化 SDK
隐私合规: 在实现 Singular SDK 时,请遵守您运营所在地区的隐私法律,包括 GDPR、CCPA、COPPA 等。有关指南,请参阅 SDK 选择加入与选择退出实践 。
每次应用启动时都要初始化 Singular SDK。SDK 初始化对于所有 Singular 归因功能都是必不可少的,并且会创建一个用于计算用户留存指标的新会话。
自动初始化
默认情况下,
SingularSDK.cs
脚本会在您的场景加载时,通过 Unity 的
Awake()
方法自动初始化 SDK。如果在 Inspector 中启用了
Initialize On Awake
,则无需额外代码。
手动初始化
如果您需要在特定时间初始化 SDK(例如,在获得用户同意之后),请禁用自动初始化并手动调用初始化方法。
手动初始化设置
- 在您的场景层级中选择 SingularSDKObject 。
- 在 Inspector 面板中,取消勾选 Initialize On Awake 。
-
在准备好初始化时,在您的代码中调用
SingularSDK.InitializeSingularSDK()。
InitializeSingularSDK 方法
在禁用自动初始化时,使用此方法手动初始化 SDK。
using UnityEngine;
using Singular;
public class GameInitializer : MonoBehaviour
{
void Start()
{
// Perform any required setup (e.g., consent management)
CheckUserConsent();
// Initialize Singular SDK after consent is obtained
// SDK Key and Secret are configured on the SingularSDKObject
SingularSDK.InitializeSingularSDK();
}
void CheckUserConsent()
{
// Your consent logic here
}
}
线程安全: 请始终从用于其他 Unity API 调用的同一线程调用 Singular Unity SDK 方法。该 SDK 在多个线程间不是线程安全的。
高级配置
Google Ads iOS 集成转化衡量所需
如果您的应用投放面向 iOS 14.5+ 用户的 Google Ads 广告系列,则需要额外的 SDK 配置步骤来支持 iOS 集成转化衡量 (ICM)。这包括:
- 集成 Google 的 On-Device Measurement (ODM) SDK
- 更新到 Singular iOS SDK v12.8.1+(或 Unity 的 v5.5.0+、Flutter/Cordova 的 v1.8.0+、React Native 的 v3.9.0+)
-
添加
-ObjC链接器标志,并在SingularConfig中启用enableOdmWithTimeoutInterval
注意:
启用
enableOdmWithTimeoutInterval
会延迟 SDK 初始化,并可能延迟深度链接回调。请在初始 SDK 实现期间完成此设置,以避免返工。
配置会话超时
自定义您的应用在后台保持多长时间后,SDK 会在应用返回前台时创建新会话。
会话超时配置
默认会话超时为 60 秒。要更改此值:
- 在您的场景层级中选择 SingularSDKObject 。
- 在 Inspector 面板中,找到 Session Timeout Sec 字段。
- 输入您所需的超时值(以秒为单位,例如 120 表示 2 分钟)。
- 保持为 0 以使用默认的 60 秒超时。
最佳实践: 设置会话超时时,请考虑您应用的典型使用模式。会话频繁且短暂的游戏可能受益于较短的超时,而生产力类应用可能需要较长的超时。
从 .unitypackage 升级到 UPM
如果您正在从旧版
.unitypackage
安装方式迁移到现代的 Unity Package Manager (UPM) 方式,请遵循以下关键升级步骤。
关键: 在安装 UPM 包之前,您必须手动删除所有现有的 Singular SDK 文件。否则将导致冲突和构建错误。
升级流程
在通过 Unity Package Manager 安装 SDK 之前,请按顺序完成以下步骤:
1. 删除代码文件
导航至您项目的
/Code
文件夹(通常为
Assets/Singular/Code
),并删除所有与 Singular 相关的 C# 脚本。
2. 删除 Android 依赖项
导航至 /Plugins/Android 并删除以下 Singular 文件:
-
所有名称中含有 "singular" 的
.aar文件 -
所有名称中含有 "singular" 的
.jar文件 -
singular-sdk.aar -
install-referrer-*.aar -
singular-unitybridge.aar
3. 删除 iOS 依赖项
导航至 /Plugins/iOS 并删除以下 Singular 文件:
-
所有
.h头文件(例如SingularSDK.h) -
所有
.m实现文件(例如SingularUnityBridge.m) -
Singular.xcframework文件夹
重要: 只删除 Singular 专属的文件。请注意不要删除您项目可能依赖的其他插件文件。
4. 验证已清理干净
- 删除文件后,完全关闭 Unity。
- 删除项目目录中的 Library 文件夹,以强制 Unity 重新导入资源。
- 重新打开您的 Unity 项目。
- 等待 Unity 完成资源的重新导入。
- 在继续进行 UPM 安装之前,确认没有编译错误。
5. 安装 UPM 包
现在您可以通过 Unity Package Manager 安装 Singular SDK。请遵循本指南顶部的 UPM 安装说明 。