本文档为Unity接入 引力引擎的技术接入方案,具体 Demo 请参考GitHub开源项目,Demo 工程中可以参考 GravityEngineDemo.cs 脚本中对每一个方法的调用示例。
在开始接入前,建议您先阅读 接入前准备以了解接入必备的基础概念。
媒体平台SDK集成说明
🎯 集成策略说明:
Unity SDK 仅针对【微信小游戏】平台 集成了腾讯SDK。对于Unity项目发布至其他平台(如抖音小游戏、Android App、iOS App等),我们未集成任何媒体的SDK。
1. 微信小游戏平台 ✅
-
状态:已集成腾讯广告小游戏SDK
-
上报方式:需手动调用我们提供的方法进行事件上报
-
版本:自
4.8.34开始支持
📌 重要说明引力SDK会自动上报以下两个基础事件给腾讯:
- REGISTER(用户注册)
- RE_ACTIVE(沉默唤起)
此外,START_APP(小游戏启动)事件由腾讯SDK自动采集(引力SDK初始化腾讯SDK时默认开启该功能)。
除以上事件外,其他所有事件(如付费、自定义行为等)均需客户端手动调用我们提供的方法进行上报。
2. 其他平台 ❌
(包括但不限于:抖音小游戏、OPPO小游戏、vivo小游戏、Android App、iOS App等)
-
状态:未集成任何媒体SDK(腾讯、巨量等均未集成)
-
上报方式:如需向媒体平台上报事件,请自行接入该平台的官方SDK
1. SDK 基础配置
微信小游戏:需要先参考微信团队发布的 微信小游戏适配方案。
抖音小游戏:需要先接入头条提供的 StarkSDK 插件。
快手小游戏:需要先接入快手提供的 SDK 插件 详情参考。
1.1 接入步骤
1.1.1 导入UnityPackage
使用低版本(5.0.24及之前)插件的客户, 要升级到5.0.25(或以上版本),可参考UnitySDK 升级方案
GravityEngine.unitypackage,通过 Assets > Import Package > Custom Package导入。1.1.2. 插件自动集成
详细操作请参考:《EDM4U插件使用说明》文档
📁 Assets/ExternalDependencyManager
-
作用:EDM4U插件(用于自动依赖管理) -
处理:如果项目已使用该插件,导入时可跳过此文件夹
📁 Assets/GravityNet
-
作用:EDM4U插件自动接入底层SDK的配置 -
处理:如果明确不需要EDM4U插件方式,可不导入此文件夹,但需要参照iOS和Android的接入文档手动导入底层SDK - 特殊情况:使用EDM4U插件自动接入失败(如unity版本不支持该插件,iOS没有cocoapods环境等),也需要参照参照iOS和Android的接入文档手动导入底层SDK。
1.1.3 手动集成
参考UnitySDK 升级方案 里的非插件引入方式
1.1.4. SDK冲突说明
Assets/GravityNet/GravityPlugins/Oaid/Editor/Dependencies.xml文件,移除对应冲突的SDK
1.2 iOS配置(仅iOS应用需要配置)
找到 Targets,在 Build Settings 菜单的 Other linker flags 选项添加 -ObjC

切换到 Build Phases 选项卡,在 Link Binary With Libraries 栏目下添加如下依赖项:
libz.tbdSecurity.frameworkAdServices.framework(optional 形式引入)SystemConfiguration.frameworklibsqlite3.tbdAppTrackingTransparency.framework(获取 idfa 需要)AdSupport.framework(获取 idfa 需要)
以上依赖项,必须全部添加,否则会导致编译失败!

1.5 添加全局宏参数
正式接入之前,您需要针对不同的平台添加不同的全局宏参数,目前引力 Unity SDK 支持以下平台:
| 支持平台 | 宏参数 | 备注 |
| GRAVITY_WECHAT_GAME_MODE | ||
| GRAVITY_BYTEDANCE_GAME_MODE | ||
| GRAVITY_BYTEDANCE_TT_GAME_MODE | 如您已升级到 TT SDK,使用本模式,详情请参考抖小 SDK 官方文档 | |
| GRAVITY_KUAISHOU_GAME_MODE | ||
| GRAVITY_KUAISHOU_WEBGL_GAME_MODE | ||
| GRAVITY_ALIPAY_GAME_MODE | ||
| GRAVITY_MEITUAN_GAME_MODE | ||
| GRAVITY_BILIBILI_GAME_MODE | ||
| GRAVITY_HUAWEI_GAME_MODE | ||
| GRAVITY_OPPO_GAME_MODE | 其他修改请参考这篇文档 | |
| GRAVITY_XIAOMI_GAME_MODE | 其他修改请参考这篇文档 | |
| 无需配置宏参数 | ||
| 无需配置宏参数 |
添加步骤如下:
- 打开 Project Settings 界面;
- 找到
Scripting Define Symbols,新增一行输入对应平台的全局宏参数,然后点击 Apply 按钮完成设置
请确保正式打包上线时,选中的宏参数依然正常生效,否则会影响到对应平台的事件上报,影响买量效果!
2.配置并启动 SDK
请参考以下代码来进行 SDK 的初始化,建议在能够获取到用户唯一 ID,如小游戏的openId、Android 设备的oaid、iOS 设备的IDFV时,尽早的进行初始化。
小游戏/快游戏
// 手动初始化(动态挂载 GravityEngineAPI 脚本)
new GameObject("GravityEngine", typeof(GravityEngineAPI));
// 小游戏应用示例
//设置实例参数并启动引擎,将以下三个参数修改成您应用对应的参数,参数可以在引力后台--设置--应用管理中查看
string accessToken = "your_access_token"; // 项目通行证,在:网站后台-->设置-->应用列表中找到Access Token列 复制(首次使用可能需要先新增应用)
string clientId = "your_user_id"; // 通常是某一个用户的唯一标识,如产品为小游戏,则必须填用户的的 openId
// 启动引力引擎
GravityEngineAPI.StartGravityEngine(accessToken, clientId, GravityEngineAPI.SDKRunMode.NORMAL);
// 开启自动采集(需升级到 5.0.13 版本才支持 MINI_GAME_ALL)
GravityEngineAPI.EnableAutoTrack(AUTO_TRACK_EVENTS.MINI_GAME_ALL, new Dictionary<string, object>(){});
配置项目合法域名
如果您的项目为小游戏,您需要将
https://backend.gravity-engine.com和https://api.gravity-engine.com配置到后台 request 合法域名列表中。
如果您是从低版本引力 sdk 升级到高版本的,请一定记得添加
https://api.gravity-engine.com域名到合法域名列表中,否则将导致事件采集失效,影响您的使用!
Android
// 手动初始化(动态挂载 GravityEngineAPI 脚本)
new GameObject("GravityEngine", typeof(GravityEngineAPI));
// Android原生应用示例
//设置实例参数并启动引擎,将以下三个参数修改成您应用对应的参数,参数可以在引力后台--设置--应用管理中查看
string accessToken = "your_access_token"; // 项目通行证,在:网站后台-->设置-->应用列表中找到Access Token列 复制(首次使用可能需要先新增应用)
string clientId = "default_placeholder"; // 固定值:default_placeholder
string channel = "xiaomi"; // 安装包渠道来源,比如xiaomi、huawei、应用宝
bool enableImei = true; // 是否采集imei,仅支持Android,默认true(选填,5.0.23 以上版本支持)
bool enableOaid = true; // 是否采集oaid,仅支持Android,默认true(选填,5.0.23 以上版本支持)
bool enableAndroidId = true; // 是否采集android_id,仅支持Android,默认true(选填,5.0.23 以上版本支持)
bool enableMac = true; // 是否采集mac,仅支持Android,默认true(选填,5.0.24 以上版本支持)
// 启动引力引擎
GravityEngineAPI.StartGravityEngine(accessToken, clientId, GravityEngineAPI.SDKRunMode.NORMAL, channel, enableImei, enableOaid, enableAndroidId,enableMac );
iOS
// 手动初始化(动态挂载 GravityEngineAPI 脚本)
new GameObject("GravityEngine", typeof(GravityEngineAPI));
// iOS原生应用示例
//设置实例参数并启动引擎,将以下参数修改成您应用对应的参数,参数可以在引力后台--设置--应用管理中查看
string accessToken = "your_access_token";
string clientId = "default_placeholder"; // iOS产品若采用引力自动获取 idfv 的方案,则这里传固定值default_placeholder即可;否则传入您自定义的 clientId
// 启动引力引擎
GravityEngineAPI.StartGravityEngine(accessToken, clientId, GravityEngineAPI.SDKRunMode.NORMAL, "appstore");
// 开启事件自动采集
GravityEngineAPI.EnableAutoTrack(AUTO_TRACK_EVENTS.APP_ALL, new Dictionary<string, object>());
请一定注意,不要忘记第一步挂载脚本!很多接入报错都是这个原因导致!
3.初始化
在可以获取到用户唯一性信息时调用本方法,推荐首次安装启动时调用,后续其他方法均需在本方法回调成功之后才可正常使用。
Android/小游戏/快游戏
public class InitializeCallbackImpl : IInitializeCallback
{
// 初始化失败之后回调,errorMsg为报错信息
public void onFailed(string errorMsg)
{
Debug.Log("initialize failed with message " + errorMsg);
}
// 初始化成功之后回调
public void onSuccess()
{
Debug.Log("initialize success");
Debug.Log("initialize call end");
// 建议在此执行一次Flush
GravityEngineAPI.Flush();
}
}
/// <summary>
/// 在引力引擎初始化,后续其他方法均需在本方法回调成功之后才可正常使用
/// </summary>
/// <param name="clientId"></param> 用户唯一标识
/// <param name="nickname"></param> 用户昵称
/// <param name="version"></param> 用户注册的程序版本,比如当前小游戏的版本号
/// <param name="openId"></param> open id (小程序/小游戏必填)
/// <param name="enableSyncAttribution"></param> 是否开启同步获取归因信息,具体请参考同步归因:https://doc.gravity-engine.com/turbo-integrated/sync_attribution.html
/// <param name="initializeCallback"></param> 网络回调,其他方法均需在回调成功之后才可正常使用
/// <exception cref="ArgumentException"></exception>
GravityEngineAPI.Initialize("your_user_client_id", "name_123", 1, "your_openid_111", false, new InitializeCallbackImpl());
针对 clientId 参数,您需要特殊注意
- 如果产品为小游戏:则必须填用户的 openid (如传空,则使用调用 StartGravityEngine 时传入的 clientId)
- 如果产品为 Android:则传入用户唯一ID,例如 UID 或者设备 ID(如传空,则引力 sdk 内部会自动采集设备 id 填入,采集优先级顺序为:oaid > android_id > imei,如果所有id 都采集不到时,会生成随机的 16 位 id 保存到本地缓存中以保持相对稳定)
针对 nickname 参数,您需要特殊注意
- 如果产品为 Android:如果传空,则引力 sdk 内部会自动根据 client_id 计算 md5 生成
iOS
openId:微信和抖音、快手小游戏此参数为必填项,是买量归因必须的参数,请注意一定传入!- 首次调用后,需要等
IInitializeCallback的onSuccess回调之后才能继续调用其他事件上报的方法,否则会上报失败!- 用户整个生命周期内,初始化接口只需要调用一次,调用成功之后,后续冷启动可以不再调用,只需要保证 SDK 正确执行初始化逻辑即可(多次调用也不会有问题,引力做了兼容)。
4.事件上报
4.1 业务注册事件上报
如果您的应用不需要追踪用户注册行为,可以跳过此事件接入。此功能仅适用于需要统计业务注册转化数据的场景。
该方法可多次调用,每次调用都会上报一个用户注册事件(计算指标时会去重)
当用户完成应用内业务注册后,您可以调用 trackRegisterEvent 方法来上报用户注册事件(APP:$AppRegister/小游戏:$MPRegister)给引力,引力会使用该事件统计后台计算指标:标准_注册数
调用示例
// 小游戏/快游戏
GravityEngineAPI.TrackMPRegister();
// Android/iOS
GravityEngineAPI.TrackAppRegister();
4.2 付费事件上报
付费事件上报用于收入统计和分析,如您的应用不涉及内购或付费服务,则无需接入此事件。
如果您需要通过后端 API 方式上报付费事件,请参考 混合上报模式 来接入事件上报接口报送付费事件。
当用户发生付费行为时,需要调用 trackPayEvent 方法记录用户付费事件,此事件非常重要,会影响买量和 ROI 统计,请务必重点测试!
方法示例
public static string TrackPayEvent(int payAmount, string payType, string orderId, string payReason, string payMethod)
参数说明
| 参数名称 | 参数含义 | 参数类型 | 是否必传 |
| payAmount | 付费金额 单位为分。请务必注意,传错单位可能会导致买量受到影响! | int | 是 |
| payType | 货币类型 按照国际标准组织ISO 4217中规范的3位字母,例如CNY人民币、USD美金等,具体请参考:国际标准组织 ISO 4217 代码表 | string | 是 |
| orderId | 订单号。引力引擎会通过订单号去重,避免重复上报,请务必准确传入! | string | 是 |
| payReason | 付费原因 例如:购买钻石、办理月卡 | string | 是 |
| payMethod | 付费方式 例如:支付宝、微信、银联等 | string | 是 |
返回值
返回值为当前事件生成的事件 trace_id
调用示例
GravityEngineAPI.TrackPayEvent(300, "CNY", "your_order_id", "月卡", "支付宝");
4.3 广告观看事件上报
广告观看上报适用于广告变现类应用,若您的应用未集成广告模块,则无需接入此事件。
微信小游戏产品需要参照 微信广告变现实时统计 一文,检查是否正确配置微信
access_token,配置错误将无法正确获取微信小游戏广告变现数据!
抖音小游戏、快手小游戏、B 站小游戏无需接入,会由引力后端自动拉取,具体配置,请参考这里
若您的产品内有广告变现,则需要在用户点击广告观看的同时上报用户广告观看事件给引力,具体参考如下:
方法示例
调用示例
5.接入验证
正式上线之前,请完成本节的校验,否则可能会导致买量上报异常!
5.1 关键事件验证
在引力后台事件流 界面开启加载实时数据,并在产品中触发以下几个事件。事件流使用说明:事件流 - 飞书云文档
| 事件名 | 事件英文名 | 触发时机 | 采集方式 | 默认映射到媒体事件 | 备注 |
|---|---|---|---|---|---|
| 用户注册 |
APP: 小游戏: |
用户完成业务注册之后 | 调用SDK的上报业务注册事件方法采集 | 暂无 | 接入了业务注册上报事件的产品均需要校验 |
| 付费 | $PayEvent |
用户付费之后 | 调用 SDK 的 上报用户付费事件 方法采集 | 付费 | 接入了付费事件上报事件的的产品均需要校验 |
| 广告展示 | $AdShow |
用户观看广告之后 | 调用 SDK 的 上报广告展示事件 方法采集 | 暂无 | 接入了广告事件上报事件的产品均需要校验 |
|
用户提现 |
$UserWithdraw |
用户提现之后 | 调用 SDK 的 上报用户提现事件 方法采集 | 暂无 | 接入了用户提现上报事件的产品均需要校验 |
触发操作后,请在事件流 界面中筛选测试用户的 Client ID,观察对应事件是否出现在实时入库页面。若事件数据正常显示,则说明接入成功;如出现于错误数据页面请根据页面错误提示进行排查;如未显示对应数据,请及时联系引力运营支持团队获取协助。
5.2 避免重复上报
如果您之前单独接了媒体的回传(SDK 或者 API),则上线之前需要去掉,否则可能会导致重复上报数据!
至此验证无误之后,您可以正常上线了。