本文档为iOS接入 引力引擎 的技术接入方案,在开始接入前,建议您先阅读 接入前准备以了解接入必备的基础概念。
1. 获取 AccessToken和产品 ID
您可以在设置-应用管理页面点击 查看参数 按钮获取当前应用的 AccessToken和产品 APP_ID ,请妥善保存避免泄露。
2.集成引力引擎 SDK
2.1 CocoaPods 自动集成
1. 创建并编辑 Podfile 内容(如果已有,直接编辑):
创建 Podfile,项目工程(.xcodeproj)文件同目录下命令行执行命令:
pod init
编辑 Podfile 的内容如下:
platform :ios, '9.0'
target 'YourProjectTarget' do
pod 'GravityEngineSDK'
end
2.执行安装命令
pod install
导入成功,启动工程
命令执行成功后,会生成 .xcworkspace 文件,说明您已成功导入 iOS SDK。打开 .xcworkspace 文件以启动工程(注意:此时不能同时开启 .xcodeproj 文件)
2.2 手动集成 SDK
下载并解压最新 iOS SDK 包,您可以在SDK下载页获取最新版本 SDK包
将 GravityEngineSDK.xcframework 拖入 XCode Project Workspace 工程项目中
找到 Targets,在 Build Settings 菜单的 Other linker flags 选项添加 -ObjC

切换到 Build Phases 选项卡,在 Link Binary With Libraries 栏目下添加如下依赖项:
libz.tbd(进行数据压缩)Security.framework(用于存储设备标识)AdServices.framework(Apple Search Ads 归因,optional 形式引入)SystemConfiguration.framework(检测网络状况)libsqlite3.tbdAppTrackingTransparency.framework(获取 idfa 需要)AdSupport.framework(获取 idfa 需要)
以上依赖项,必须全部添加,否则会导致编译失败!
3. 配置并启动 SDK
Objective-C
GEConfig *config = [GEConfig new];
config.appid = "APP_ID";
config.accessToken = "ACCESS_TOKEN";
[GravityEngineSDK startWithConfig:config];
GravityEngineSDK *instance = [GravityEngineSDK sharedInstanceWithAppid:config.appid];
// 开启自动采集
[instance enableAutoTrack:GravityEngineEventTypeAll];
参数说明:
APP_ID: 在第一步中获取的项目通行证 APP_IDACCESS_TOKEN: 在第一步中获取的项目通行证 AccessToken
应用每次启动都要执行
SDK的启动逻辑,建议在用户同意隐私政策弹窗之后尽早调用。
请一定注意,要按照文档要求,开启自动采集,否则可能会导致买量问题!
4.初始化
在用户可以获取到用户唯一性 ID 时调用此方法,推荐首次安装启动时调用,请启动应用之后尽早调用。
4.1 添加 att 弹窗描述
需要先在 info.plist 文件中添加跟踪权限请求描述文字,如果不添加会导致 idfa 获取失败!描述文字内容仅作示例,具体请联系您的产品同学确认!
<key>NSUserTrackingUsageDescription</key>
<string>此标识符将用于向您推荐个性化广告。</string>
4.2 调用引力初始化
注意:请确保用户已经同意网络授权弹窗之后,才能调用引力初始化接口,如果提前调用,将因为网络不通导致初始化失败!导致首次启动归因失败!
[instance initializeGravityEngineWithAsaEnable:ENABLE_ASA withClientId:USER_CLIENT_ID withCaid1:USER_CAID1_MD5 withCaid2:USER_CAID2_MD5 withSyncAttribution:ENABLE_SYNC_ATTRIBUTION withChannel:CHANNEL withSuccessCallback:^(NSDictionary * _Nonnull response) {
NSLog(@"gravity engine initialize success, response is %@", response);
} withErrorCallback:^(NSError * _Nonnull error) {
NSLog(@"gravity engine initialize failed, and error is %@", error);
}];
参数说明:
| 参数名称 | 参数含义 | 参数类型 | 是否必传 |
| ENABLE_ASA | 是否开启 ASA 广告归因,传 YES 则开启,引力会自动获取 ASA 归因信息,传 NO 则引力不会获取。 | bool | 是 |
| USER_CLIENT_ID | 当前用户在引力系统中的唯一标识,如果传空字符串,则引力 sdk 内部会采集一个稳定的 idfv (保存在 keychain 中保持 idfv 稳定)作为用户唯一标识(推荐传空字符串) | NSString | 是 |
| USER_CAID1_MD5 | 当前用户中广协 ID 的 md5 hash(20230330 版本)(可为空字符串) | NSString | 是 |
| USER_CAID2_MD5 | 当前用户中广协 ID 的 md5 hash(20250325 版本)(可为空字符串) | NSString | 是 |
| ENABLE_SYNC_ATTRIBUTION | 是否开启同步获取归因信息,具体请参考同步归因 | bool | 是 |
| CHANNEL | 当前用户渠道,您可以自行定义传入的参数,如无自定义的需求,可以传入默认值:appstore | NSString | 是 |
- 首次调用后,需要等
CallbackWithSuccess回调成功之后,才能继续调用后续的事件上报方法- 调用成功之后,后续冷启动可以不再调用初始化,只需要正常启动 SDK 即可(多次调用也不会有问题,引力做了兼容)
- 以上字符串参数无值时,请传入空字符串,不要传入
nil
4.3 最佳实践(推荐)
引力 sdk 内部在采集 idfa 数据之前,会尝试弹出 App Tracking Transparency(ATT)许可弹窗 (如果之前已经弹出过,则不会重新弹出,会自动复用之前的用户选择),用户点击允许之后,才可以采集到 idfa ,引力已经兼容了 iOS14 系统之前和 iOS14 系统之后获取 idfa 的代码(引力 ios sdk 5.0.8 及以上支持,unity sdk 5.0.22 及以上支持),并在无论是否获取到 idfa 时,都会继续调用引力 SDK 的 initialize 函数完成初始化调用。
我们推荐您通过 withClientId 传入空字符串,这样引力 sdk 内部会自动获取当前 app 的 version、idfa、idfv,并将首次获取的 idfv 保存到keychain中,保证当前设备后续卸载重装之后,能始终获取到最初的 idfv,并将这个稳定的 idfv 作为 client id 传给引力后台作为唯一用户 ID;
在混合上报的场景下,如您需要获取当前用户的 clientId,您可以调用 getCurrentClientId 方法获取;代码示例如下:
// instance 为启动 SDK 时获取的引力实例对象
NSString *clientId= [instance getCurrentClientId];
SDK 获取 version 的逻辑为:采集 CFBundleVersion 字符串,并将小数点去除转换为 int 类型上报给引力后台,代码示例如下;
NSString *buildVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
5.事件上报
5.1 业务注册事件上报
如果您的应用不需要追踪用户注册行为,可以跳过此事件接入。此功能仅适用于需要统计业务注册转化数据的场景。
该方法可多次调用,每次调用都会上报一个用户注册事件(计算指标时会去重)
当用户完成应用内业务注册后,您可以调用 trackRegisterEvent 方法来上报用户注册事件($AppRegister)给引力,引力会使用该事件统计指标:标准_注册数
方法示例
- (void)trackRegisterEvent;
调用示例
Objective-C
[instance trackRegisterEvent];
Swift
instance?.trackRegisterEvent();
5.2 付费事件上报
付费事件上报用于收入统计和分析,如您的应用不涉及内购或付费服务,则无需接入此事件。
如果您需要通过后端 API 方式上报付费事件,请参考 混合上报模式 来接入事件上报接口报送付费事件。
当用户发生付费行为时,需要调用 trackPayEvent 方法记录用户付费事件,此事件非常重要,会影响买量和 ROI 统计,请务必重点测试!
方法示例
- (void)trackPayEventWithAmount:(int)payAmount withPayType:(NSString *)payType withOrderId:(NSString *)orderId withPayReason:(NSString *)payReason withPayMethod:(NSString *)payMethod;
5.3 广告观看事件上报
广告观看上报适用于广告变现类应用,若您的应用未集成广告模块,则无需接入此事件。
若您的产品内有广告变现,则需要在用户点击广告观看的同时上报用户广告观看事件给引力,具体参考如下:
方法示例
- (void)trackAdShowEventWithUninType:(NSString *)adUnionType withPlacementId:(NSString *)adPlacementId withSourceId:(NSString *)adSourceId withAdType:(NSString *)adType withAdnType:(NSString *)adAdnType withEcpm:(NSNumber *)ecpm;
[instance trackAdShowEventWithUninType:@"topon" withPlacementId:@"placement_id" withSourceId:@"ad_source_id" withAdType:@"reward" withAdnType:@"csj" withEcpm:@1000];
5.4 提现事件上报
提现事件仅与涉及用户提现功能的平台相关,如无此类业务需求,则无需接入此事件。
当用户发生应用内提现行为时,需要调用 trackWithdrawEvent 方法记录用户提现事件!
方法示例
- (void)trackWithdrawEvent:(int)payAmount withPayType:(NSString *)payType withOrderId:(NSString *)orderId withPayReason:(NSString *)payReason withPayMethod:(NSString *)payMethod;
调用示例
Objective-C
[instance trackWithdrawEventWithAmount:@1000 withPayType:@"CNY" withOrderId:@"order_id_xxx1" withPayReason:@"用户首次提现" withPayMethod:@"支付宝"];
6.接入验证
正式上线之前,请完成本节的校验,否则可能会导致买量上报异常!
6.1 关键事件验证
在引力后台事件流 界面开启加载实时数据,并在产品中触发以下几个事件。事件流使用说明:事件流 - 飞书云文档
| 事件名 | 事件英文名 | 触发时机 | 采集方式 | 默认映射到媒体事件 | 备注 |
|---|---|---|---|---|---|
| 用户注册 | $AppRegister |
用户完成业务注册之后 | 调用SDK的上报业务注册事件方法采集 | 暂无 | 接入了业务注册上报事件的产品均需要校验 |
| 付费 | $PayEvent |
用户付费之后 | 调用 SDK 的 上报用户付费事件 方法采集 | 付费 | 接入了付费事件上报事件的的产品均需要校验 |
| 广告展示 | $AdShow |
用户观看广告之后 | 调用 SDK 的 上报广告展示事件 方法采集 | 暂无 | 接入了广告事件上报事件的产品均需要校验 |
|
用户提现 |
$UserWithdraw |
用户提现之后 | 调用 SDK 的 上报用户提现事件 方法采集 | 暂无 | 接入了用户提现上报事件的产品均需要校验 |
触发操作后,请在事件流 界面中筛选测试用户的 Client ID,观察对应事件是否出现在实时入库页面。若事件数据正常显示,则说明接入成功;如出现于错误数据页面请根据页面错误提示进行排查;如未显示对应数据,请及时联系引力运营支持团队获取协助。
6.2 避免重复上报
如果您之前单独接了媒体的回传(SDK 或者 API),则上线之前需要去掉,否则可能会导致重复上报数据!
至此验证无误之后,您可以正常上线了。