1.集成 OAID
匿名设备标识符(Open Anonymous Device Identifier,简称 OAID)是一种用于安卓设备的唯一标识符,可由用户重置。该标识符由移动安全联盟(MSA)、中国信息通信研究院以及设备厂商合力推出,旨在替代 IMEI 等不可重置的设备标识符,以保护用户隐私。
使用最新的 MSA SDK 版本,才能支持市面上最新推出的手机,进而提升 OAID 的获取率,由于归因匹配很大程度上依赖 OAID 完成,所以使用最新版本的 MSA SDK 对于降低您应用的买量成本至关重要!
引力引擎 SDK 支持最新版本的 MSA SDK!需要您按照如下步骤进行手动集成。
1.1 集成 OAID
1.1.1 MSA1.0.25 之后版本(推荐,采集率更高)
- 在MSA 官网注册账号并等待审核通过;
- 账号审核通过后,下载OAID的SDK,找到里面的 csv 文件,填写好游戏包名等信息,然后附邮件发送到 msa@caict.ac.cn 获取对应的证书文件(证书文件有效期为1年,请注意及时更换,建议可以通过服务端下发证书字符串,并通过引力提供的:setOaidCertStr 方法传入证书,可以保证历史已发布apk包在证书到期时无需升级安装包即可继续正常采集 oaid。)
- 证书申请完成之后,将
supplierconfig.json
、应用包名.cert.pem
、aar
文件放在项目中合适的位置; - 按照 MSA 文档添加混淆配置。
引力引擎会默认读取 assets
中命名为应用包名.cert.pem
的文件当做签名文件初始化 MSA SDK。
应用包名.cert.pem
中应用包名要替换成你自己的应用包名!
如果你需要自定义签名文件的路径,可以使用如下方法进行设置
/**
* 定义 oaid 证书在 assets 中的文件相对路径
*
* @param filePath oaid 证书在 assets 中的相对路径,eg:"file/test.cert.pom"
*/
OaidHelper.setOaidCertFilePath(filePath);
如果您的证书文件不是放在项目中参与打包,而是后端下发的字符串,您可以通过如下方式传入证书内容:
/**
* 直接传入证书的文本内容
* @param oaidCertStr
*/
OaidHelper.setOaidCertStr(oaidCertStr);
1.1.2 MSA1.0.25 及之前版本
无需单独申请 MSA 证书,只需将 MSA 的 AAR 包集成到项目中即可,引力 SDK 将自动采集设备的 OAID。MSA 1.0.25 下载
缺点:部分新上市的手机机型可能无法成功采集 OAID,不建议采用!
1.2 直接传入 OAID
如果您通过其他 SDK,比如友盟 SDK 已经获取到 OAID 字符串,您可以通过直接传入字符串的方式把 OAID 传递给引力 SDK,这样能避免引力再次获取,传入方式如下:
/**
* 用户直接设置oaid
* @param context
* @param oaid
*/
OaidHelper.setOaid(context, yourOaidString);
1.3 获取 OAID
如您有获取 OAID 字符串的需要,可以按照如下方式获取
OaidHelper.getOpenAdIdentifier(mContext);
请注意该接口是同步接口,必须子线程中使用!经过测试,耗时在 10 - 1000ms 之间。
2.自动采集事件
引力引擎 SDK 支持自动采集一些基础事件以降低您的接入成本,您可以参考自动采集一文来快速开启。
3.开启 Debug 模式
SDK 支持在两种模式下运行:
Normal
: 线上模式,数据会存入缓存,并依据一定的缓存策略上报Debug
: 测试模式,数据逐条上报。当出现问题时会以日志和异常的方式提示用户,您也可以去事件流中查看实时上报的数据数,辅助您判断数据接入是否正常。
您可以通过如下方式来开启 Debug
GEConfig config = GEConfig.getInstance(mContext, Constants.ACCESS_TOKEN);
config.setMode(GEConfig.ModeEnum.DEBUG);
Debug 模式仅仅用于集成阶段数据校验,不要在生产模式下使用!
4.绑定三方平台
引力支持与数数BI打通,具体如下:
- 引力后台配置数数相关
- 客户端代码触发三方绑定事件上报
4.1 引力后台配置
您需要先在引力后台-设置-应用管理页面配置项中配置好数数科技回调,需提供以下信息:
数数应用id:从数数后台获取对应产品的id
数数采集地址:根据数数接收接口文档找到您公司对应的采集地址,采集地址以sync_json结尾
回传模式选择:
- user_set:多次回调数据到数数时,将会覆盖原有的属性值
- user_setOnce:多次回调数据到数数时,如该属性之前已经有值,则忽略本次更新

- 键:填入您在数数后台创建的用户属性,用于存放回传的值
- 值:选择宏参数,可选的宏参数相关信息请参考引力后台显示
- 快速调试:输入上报给引力的用户clientid,测试该用户的归因信息是否正常回调给数数。需要注意,自然量不会回调给数数,仅归因为买量平台的用户会进行回调。

4.2 触发【三方绑定事件】
为确保引力能正常执行数数回调,请务必在接入完成后进行以下验证:
- 触发【三方绑定事件】上报
- 在用户细查-深度挖掘模块中检查该用户的行为序列
- 确认行为序列中已包含【三方绑定事件】
若未检测到该事件,请检查接入流程是否完整。此验证步骤对确保回调功能正常运行至关重要。
引力会自动将引力
client ID
和您传入的数数account_id
以及distinct_id
做关联,在回调数数接口时,通过这个关联传递对应的account_id
、distinct_id
给数数后台
方法示例
public void bindTAThirdPlatform(String taAccountId, String taDistinctId)
参数说明
参数名称 | 参数含义 | 参数类型 | 是否必传 |
taAccountId | 当前用户的数数账户 ID (#account_id) | string | 是 |
taDistinctId | 当前用户的数数访客 ID (#distinct_id) | string | 是 |
调用示例
gravityEngineSDKInstance.bindTAThirdPlatform("当前用户的taAccountId","当前用户的taDistinctId");
5.时间校准
5.1 通过时间戳校准
您可以通过调用 calibrateTime 方法传入从服务端获取的当前时间戳对 SDK 的时间进行校准。此后,所有未指定时间的调用,包括事件数据和用户属性设置操作,都会使用校准后的时间作为发生时间。
代码示例
// 1733169963000 为当前 unix 时间戳,单位为毫秒,对应北京时间 2024-12-03 04:06:03
gravityEngineSDKInstance.calibrateTime(1733169963000);
5.2 通过 NTP 服务器校准
您可以通过调用 calibrateTimeWithNtp 方法传入NTP服务器地址,之后 SDK 会尝试从传入的 NTP 服务地址中获取当前时间,并对 SDK 时间进行校准。如果在默认的超时时间(3 秒)之内,仍未获取到 NTP 服务器返回的正确结果,后续将使用本地时间上报数据。
代码示例
// 使用阿里云 NTP 服务对时间进行校准
gravityEngineSDKInstance.calibrateTimeWithNtp("ntp.aliyun.com");
使用 NTP 服务进行时间校准存在一定的不确定性,建议您优先考虑用时间戳校准的方式
您需要谨慎地选择您的 NTP 服务器地址,以保证网络状况良好的情况下,用户设备可以很快的获取到服务器时间
- 关于 NTP 服务器相关更多信息请参考:https://dns.icoa.cn/ntp/